;** RO_0431 ********************************************************************
;** Imprime a Digitacao do Romaneio                                            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 27/03/2019 por Bruno Carvalho           
;Ultima Altera‡Æo:   /  /     por 
;Motivo Altera‡Æo:          

;*******************************************************************************
;* Rotina para Checar Linha                                                    *
;*******************************************************************************
Proc ChecaLinha(PARAM)
Private TEMP,TAB_ANT

TAB_ANT = Table()
If Cont>=34
   Then If PARAM = "Final"
           Then 
           Else IMPRIME_LINHA=False
                Print File ARQIMP "\n"
                Print File ARQIMP Format("W80,AC","CONTINUA NA PROXIMA FOLHA")+"\n"
        EndIf   
        Cont = 0
        PAG  = 0
        Print File ARQIMP "\f"
        Cabecalho()     
        TEMP = True
        Moveto TAB_ANT 
   Else IMPRIME_LINHA=True
        TEMP = False                                      
EndIf

Return TEMP
 
EndProc ;ChecaLinha()

;*******************************************************************************
;* Rotina para Impressao do Cabe‡alho                                          *
;*******************************************************************************
Proc Cabecalho()

Print File ARQIMP CI_F_TIMES
Print File ARQIMP "\027E"

Moveto "Faturac"
Print File ARQIMP chr(27)+chr(67)+chr(33) 
Print File ARQIMP CI_10CPP
Print File ARQIMP CI_6LPP

Print File ARQIMP Fill(chr(196),80)+"\n"
Print File ARQIMP Format("W13,AL","VENDA: "+Format("W6.3",NOTAFISC))+Spaces(1)+
                            Format("W19","EMISSAO: "+Format("D10",[FaturaC->Data de Emissao]))+Spaces(1)+
                            Format("W28","VENDEDOR: "+[Nome Fantasia Represent])+Spaces(1)+
                            Format("D10",Today())+Spaces(1)+Format("W8",Time())+"\n"
Print File ARQIMP Fill(chr(196),80)+"\n"

GetRecord "\\Sistemas\\Cadastro\\Destinat" [FaturaC->Codigo] To REG_DESTINAT
If RetVal
   Then CONTA_CONTABIL = REG_DESTINAT["Conta Contabil"]
        EMAIL          = REG_DESTINAT["Endereco_Eletronico"]
        TELEFONE       = REG_DESTINAT["Telefone"]
        CELULAR        = REG_DESTINAT["Celular"]
        FAX            = REG_DESTINAT["Fax"]
   Else CONTA_CONTABIL = ""
        EMAIL          = ""
        TELEFONE       = ""
        CELULAR        = ""
        FAX            = ""
EndIf   

Print File ARQIMP Format("W50"," Cliente: "+Format("W5",[Codigo])+"- "+Format("W5",AlinhM(CONTA_CONTABIL,5))+Spaces(1)+[FaturaC->Razao Social])+
                            " CPF/CNPJ: "+[FaturaC->CGC]+Spaces(1)+"\n"
Print File ARQIMP Format("W50","Endereco: "+[Endereco])+Spaces(1)+"Insc.Est.: "+[IE]+Spaces(1)+"\n"
Print File ARQIMP Format("W33","  Cidade: "+[Cidade]+" - "+[UF])+Spaces(1)+
                            Format("W16","CEP: "+[FaturaC->CEP])+Spaces(1)+Format("W31","Email: "+EMAIL)+"\n"
Print File ARQIMP Format("W25","Telefone: "+TELEFONE)+Spaces(1)+Format("W24","Celular: "+CELULAR)+Spaces(1)+Format("W25","Fax: "+FAX)+"\n"
Print File ARQIMP Fill(chr(196),80)+"\n"
Print File ARQIMP "C¢digo     Descricao            Un Quantidade  Vr.APrazo  Vr.AVista     Vr.Total"+"\n"
                  ;1234567890X12345678901234567890X12X1234567890X1234567890X1234567890X123456789012
Print File ARQIMP Fill(chr(196),80)+"\n"

Cont = 10

EndProc ;Cabecalho()

;*******************************************************************************
;* Rotina para Impressao do Cabe‡alho                                          *
;*******************************************************************************
Proc Itens()

Cabecalho()

Moveto "FaturaI"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
QUANT    = 0
TOT      = 0
CONTADOR = 0
NITEM    = 0
While [Numero da OF]=[FaturaC->Numero da OF]
  NITEM     = NITEM + 1
  ITEM_DESC = ""
  ITEM_REF  = ""
  GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM
  If Retval
     Then ITEM_DESC = REG_ITEM["Descricao Complementar"]
          ITEM_REF  = REG_ITEM["Referencia"] 
  EndIf
  If Rtrim(ITEM_DESC) = "" Then ITEM_DESC = [Descricao do Item] EndIf
  
  PR_AVISTA = BlankNum()
  PR_APRAZO = [Preco Unitario]
  PR_TOTAL  = PR_APRAZO*[Quantidade]
  
  GetRecord "\\Sistemas\\Vendas\\Condpgto" [FaturaC->Condicao de Pagamento] To REG_CONDPAGTO
  If RetVal  
     Then If REG_CONDPAGTO["Taxa Desconto"] > 0
             Then PR_AVISTA = PR_APRAZO  - (PR_APRAZO * REG_CONDPAGTO["Taxa Desconto"] / 100)
                  PR_TOTAL  = PR_AVISTA*[Quantidade]
          EndIf
  EndIf
  
  ;---- Descri‡Æo Complementar ---------------------------------------
  nl=len(ITEM_DESC)/20
  If (len(ITEM_DESC)/20) > int(nl) or nl=0
     Then nl=int(nl)+1
  EndIf
  Cont = Cont + nl
  ChecaLinha("")
  PosI=1
  S=Format("W10,AL",ITEM_REF)+Spaces(1)
  For ii From 1 To nl
    S=S+Format("W21,AL",Substr(ITEM_DESC,PosI,20))
    PosI=PosI+20
    If Substr(ITEM_DESC,PosI,20)<>""
     Then Print File ARQIMP S+"\n"
          S=Spaces(11)
    EndIf      
  EndFor
  Print File ARQIMP S
  ;------------------------------------------------------------------
    
  Print File ARQIMP Format("W2,Al",[Unidade Fiscal])
  If [Quantidade]-Int([Quantidade])>0
     Then Print File ARQIMP Spaces(1)+Format("W10.2,EIC",[Quantidade])
     Else Print File ARQIMP Spaces(1)+Format("W10,EIC",[Quantidade])
  EndIf

  Print File ARQIMP Spaces(1)+Format("W10.2,EIC",PR_APRAZO)
  Print File ARQIMP Spaces(1)+Format("W10.2,EIC",PR_AVISTA)
  Print File ARQIMP Spaces(1)+Format("W12.2,EIC",PR_TOTAL)+"\n"
  CONTADOR = CONTADOR + nl
  TOT   = TOT + PR_TOTAL
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

If CONTADOR<12 
   Then Cont = Cont + (6-CONTADOR)
        ChecaLinha("")
        For ITEM From CONTADOR To 6
          Print File ARQIMP "\n"
        EndFor
EndIf

Cont = Cont + 3
ChecaLinha(Cont)

Print File ARQIMP Fill(chr(196),80)+"\n"
Print File ARQIMP Format("W61","ITENS: "+StrVal(NITEM))+"TOTAL: "+Format("W12.2,EIC",TOT)+"\n"
Print File ARQIMP Fill(chr(196),80)+"\n"

;********************* IMPRESSAO DOS TOTAIS **************************
Moveto "FaturaC"

Cont = Cont + 3
ChecaLinha(Cont)

VR_DESCONTO = [FaturaC->Valor Desconto]
VR_LIQUIDO  = Format("W12.2,EIC",TOT) 
If VR_DESCONTO > 0
   Then LINHA_DESCONTO = "Desconto: "+Format("W12.2,EIC",VR_DESCONTO)
   Else LINHA_DESCONTO = ""
EndIf

If [FaturaC->Valor Desconto]>0
   Then LINHA_LIQUIDO = " Liquido: "+VR_LIQUIDO-[FaturaC->Valor Desconto]
   Else LINHA_LIQUIDO = " Liquido: "+VR_LIQUIDO
EndIf   

Switch
  Case [FaturaC->Tipo de Pagamento]="V" : Print File ARQIMP "ATENCAO: CONDICAO DE PAGAMENTO: A VISTA"+Spaces(19)  
  Case [FaturaC->Tipo de Pagamento]="P" : Print File ARQIMP "ATENCAO: CONDICAO DE PAGAMENTO: A PRAZO"+Spaces(19)
  OtherWise                             : Print File ARQIMP Spaces(58)
EndSwitch

If LINHA_DESCONTO <> ""
   Then Print File ARQIMP Format("W22,AR",LINHA_DESCONTO)+"\n"  
        Print File ARQIMP Spaces(58)+Format("W22,AR",LINHA_LIQUIDO)+"\n"
   Else Print File ARQIMP Format("W22,AR",LINHA_LIQUIDO)+"\n"
EndIf 

Print File ARQIMP "\n"

Cont = Cont + 5
ChecaLinha(Cont)

Vencimentos()
Print File ARQIMP LINHA1+"\n"
Print File ARQIMP LINHA2+"\n"
Print File ARQIMP LINHA3+"\n"
Print File ARQIMP LINHA4+"\n\n"

Cont = Cont + 3
ChecaLinha(Cont)

Print File ARQIMP Spaces(7)+" VOL: "+StrVal([FaturaC->Numero de Volumes])+"\n"
Print File ARQIMP Spaces(7)+"PESO: "+StrVal([FaturaC->Peso Bruto])+"\n\n"

TITULO_OBS    = "Observa‡äes: "
IMPRIME_LINHA = False
CARACTER_OBS  = 80                            
LINHA_OBS     = 0

OBS = [FaturaC->Observacao na Nota Fiscal]
If [FaturaC->Codigo da Transportadora]<>"" 
   Then If Search("PROPRIO",Upper([FaturaC->Nome Fantasia Transport]))=0
           Then OBS = OBS + Spaces(3) + "TRANSPORTADOR: "+[FaturaC->Codigo da Transportadora]+" "+[FaturaC->Nome Fantasia Transport]
        EndIf      
EndIf

If OBS<>""
  Then Observacao()
       Cont = CONTADOR + CONTADOR
       ChecaLinha("") 
       If IsAssigned(ARRAY_OBS)
          Then For i From 1 To DynArraySize(ARRAY_OBS)
                 Switch
                   Case i=1  : Print File ARQIMP Format("W"+StrVal(CARACTER_OBS),SubStr(ARRAY_OBS[i],4,Len(ARRAY_OBS[i])))+"\n"
                   OtherWise : Cont=Cont+1
                               Print File ARQIMP Format("W"+StrVal(CARACTER_OBS),SubStr(ARRAY_OBS[i],4,Len(ARRAY_OBS[i])))+"\n"
                 EndSwitch
               EndFor
       EndIf
  Else Print File ARQIMP Spaces(CARACTER_OBS)+"\n"
       ChecaLinha("")
EndIf

EndProc

;*******************************************************************************
;* Rotina de Vencimentos                                                       *
;*******************************************************************************
Proc Vencimentos()

LINHA1 = "Vencimentos: " 
LINHA2 = ""    ;XX  R$ XX,XX     XX  R$ XX,XX     XX  R$ XX,XX     XX  R$ XX,XX
LINHA3 = ""    ;XX  R$ XX,XX     XX  R$ XX,XX     XX  R$ XX,XX     XX  R$ XX,XX
LINHA4 = ""    ;XX  R$ XX,XX     XX  R$ XX,XX     XX  R$ XX,XX     XX  R$ XX,XX

K=0
Moveto "FaturaV"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While [Numero da OF]=[FaturaC->Numero da OF]
  K=K+1
  Switch
    Case K=1 : LINHA2 = LINHA2 + Format("W5,AL",[Numero de Dias])+"R$ "+Format("W9.2,AL,EIC",[Valor])+Spaces(3)
    Case K=2 : LINHA3 = LINHA3 + Format("W5,AL",[Numero de Dias])+"R$ "+Format("W9.2,AL,EIC",[Valor])+Spaces(3)
    Case K=3 : LINHA4 = LINHA4 + Format("W5,AL",[Numero de Dias])+"R$ "+Format("W9.2,AL,EIC",[Valor])+Spaces(3)
  Endswitch
  If K=3 Then K=0 EndIf 
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

EndProc ;Vencimentos()

;*******************************************************************************
;* Rotina de Observa‡Æo                                                        *
;*******************************************************************************
Proc Observacao()

Release Vars ARRAY_OBS 
DynArray ARRAY_OBS[]           
 
CONTADOR = 0    

If TITULO_OBS<>"" Then CARACTER_OBS = CARACTER_OBS - Len(TITULO_OBS) EndIf        
CONTROL  = OBS

PosI     = Search("\n",CONTROL)
If PosI > 0
   Then While PosI > 0
          AUX     = SubStr(CONTROL,1,PosI-1)
          CONTROL = SubStr(CONTROL,PosI+1,Len(CONTROL))
          LINHA   = Int(Len(AUX) / CARACTER_OBS)
                    If (Len(AUX) / CARACTER_OBS) - LINHA > 0
                       Then LINHA = LINHA + 1
                    EndIf
          LINHA_OBS = LINHA_OBS + LINHA      
          For i From 1 To LINHA
            CONTADOR = CONTADOR + 1
            If i = 1
               Then INI = 1
               Else INI = ((i-1)*CARACTER_OBS)+1
            EndIf
            If CONTADOR = 1
               Then ARRAY_OBS[CONTADOR] = AlinhM(StrVal(CONTADOR),3)+TITULO_OBS
               Else ARRAY_OBS[CONTADOR] = AlinhM(StrVal(CONTADOR),3)+Spaces(Len(TITULO_OBS))
            EndIf
            ARRAY_OBS[CONTADOR] = ARRAY_OBS[CONTADOR] + Ltrim(Rtrim(SubStr(AUX,INI,CARACTER_OBS)))
          EndFor    
          PosI      = Search("\n",CONTROL)
        EndWhile
        If CONTROL<>"" 
           Then LINHA = Int(Len(CONTROL) / CARACTER_OBS)
                If (Len(CONTROL) / CARACTER_OBS) - LINHA > 0
                   Then LINHA = LINHA + 1
                EndIf
                For i From 1 To LINHA
                   CONTADOR = CONTADOR + 1
                   If i = 1
                      Then INI = 1
                      Else INI = ((i-1)*CARACTER_OBS)+1
                   EndIf 
                   If CONTADOR = 1
                      Then ARRAY_OBS[CONTADOR] = AlinhM(StrVal(CONTADOR),3)+TITULO_OBS
                      Else ARRAY_OBS[CONTADOR] = AlinhM(StrVal(CONTADOR),3)+Spaces(Len(TITULO_OBS))
                   EndIf
                   ARRAY_OBS[CONTADOR] = ARRAY_OBS[CONTADOR] + Ltrim(Rtrim(SubStr(CONTROL,INI,CARACTER_OBS)))     
                EndFor 
        EndIf           
     Else LINHA = Int(Len(CONTROL) / CARACTER_OBS)
                If (Len(CONTROL) / CARACTER_OBS) - LINHA > 0
                   Then LINHA = LINHA + 1
                EndIf       
        For i From 1 To LINHA
           CONTADOR = CONTADOR + 1
           If i = 1
              Then INI = 1
              Else INI = ((i-1)*CARACTER_OBS)+1
           EndIf 
           If CONTADOR = 1
              Then ARRAY_OBS[CONTADOR] = AlinhM(StrVal(CONTADOR),3)+TITULO_OBS
              Else ARRAY_OBS[CONTADOR] = AlinhM(StrVal(CONTADOR),3)+Spaces(Len(TITULO_OBS))
           EndIf
           ARRAY_OBS[CONTADOR] = ARRAY_OBS[CONTADOR] + Ltrim(Rtrim(SubStr(CONTROL,INI,CARACTER_OBS)))     
        EndFor
EndIf    
NLINHA = LINHA_OBS  

EndProc ;Observacao()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If Not IsAssigned(NOMEMPRESA) Then NOMEMPRESA="" EndIf

ArqImp=PrivDir()+"RO_0431.Txt"
If IsFile(ArqImp)
   Then Deleta_Arquivo(ARQIMP)
EndIf

AGUARDE("Imprimindo Romaneio -> "+NOTAFISC)

Itens()
;---- Imprime Arquivo Impressao ------------------------------------------------
ImpriArq(ARQIMP)

Release Vars VALOR,NDIAS,ARRAY_OBS,CONTADOR
Release Procs ChecaLinha,Cabecalho,Itens,Vencimentos,Observacao
LIMPAGUARDE()
