;** RO_0399 ********************************************************************
;** Imprime a Digitacao do Romaneio                             ** VIANELLI **  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 19/09/2017 por Bruno Carvalho           
;Ultima Altera‡Æo: 24/10/2017 por Anivel Augusto Rodrigues
;Motivo Altera‡Æo: Ajustes          
;Ultima Altera‡Æo: 26/10/2017 por Anivel Augusto Rodrigues
;Motivo Altera‡Æo: Ajustes quebra folha, numro de copias          
;Ultima Altera‡Æo: 07/11/2017 por Bruno Carvalho
;Motivo Altera‡Æo: Ajustes no PARAM_NITENS
;Ultima Altera‡Æo: 13/03/2018 por Anivel Augusto Rodrigues
;Motivo Altera‡Æo: Ajustes descricao do item + descr.complementar+infadicionais

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

;************************** IMPRESSAO DO CABECALHO *****************************
Moveto "FaturaC"
If Not IsAssigned(NOMEMPRESA) Then NOMEMPRESA="" EndIf

Moveto "Faturac"

CONT = CONT + 1   
IMPRESSAO[CONT] =                   chr(27)+chr(67)+chr(44) 
IMPRESSAO[CONT] = IMPRESSAO[CONT] + CI_15CPP+ CI_8LPP
IMPRESSAO[CONT] = IMPRESSAO[CONT] + "   CONTROLE INTERNO - "+format("W50,AL",SYS_NOME_USUARIO)
IMPRESSAO[CONT] = IMPRESSAO[CONT] + "Emissao: "+Format("D13",[Data de Emissao])+spaces(05)+"Saida: "+Format("D13",[Data de Saida])+" "+[Hora de Saida]

CONT = CONT + 1
IMPRESSAO[CONT] = ""

CONT = CONT + 1
IMPRESSAO[CONT] = CI_10CPP+CI_IEXP+CI_INEG
IMPRESSAO[CONT] = IMPRESSAO[CONT] + Spaces(15)+"Orcamento N§ "+Format("W06.3,AL",NOTAFISC)+CI_FEXP+CI_FNEG

CONT = CONT + 1
IMPRESSAO[CONT] = ""

CONT = CONT + 1  
IMPRESSAO[CONT] = Spaces(2)+"Cliente : "+Format("W05,AL",[Codigo])+Format("W46,AL",[Nome Fantasia EmitDest])

CONT = CONT + 1  
IMPRESSAO[CONT] =                   "\027F"
IMPRESSAO[CONT] = IMPRESSAO[CONT] + "\027P"     
IMPRESSAO[CONT] = IMPRESSAO[CONT] + Spaces(2)+Spaces(10)+Format("W40,AL",[Endereco])
IMPRESSAO[CONT] = IMPRESSAO[CONT] + Format("W18,AL",[CGC])

CONT = CONT + 1  
IMPRESSAO[CONT] =                   Spaces(2)+Spaces(10)+Format("W20,AL",[Bairro])
IMPRESSAO[CONT] = IMPRESSAO[CONT] + Format("W20,AL",[CEP])
IMPRESSAO[CONT] = IMPRESSAO[CONT] + Format("W25,AL",[IE])

CONT = CONT + 1  
IMPRESSAO[CONT] =                   Spaces(2)+Spaces(10)+Format("W20,AL",[Cidade])
IMPRESSAO[CONT] = IMPRESSAO[CONT] + Format("W20,AL",[UF])
IMPRESSAO[CONT] = IMPRESSAO[CONT] + Format("W25,AL",[Telefone])

CONT = CONT + 1  
IMPRESSAO[CONT] =                   Spaces(2)+"Vendedor: "+Format("W05,AL",[Codigo do Representante])
IMPRESSAO[CONT] = IMPRESSAO[CONT] + Format("W25,AL",[Nome Fantasia Represent])

CONT = CONT + 1  
IMPRESSAO[CONT] = "\015"
IMPRESSAO[CONT] = IMPRESSAO[CONT] + 
                  Spaces(2)+"---------------------------------------------------------------------------------------------------------------------"

CONT = CONT + 1
IMPRESSAO[CONT] = Spaces(4)+"Item                                                                          Un  Quantidade  Unitario        Total"

CONT = CONT + 1
IMPRESSAO[CONT] = Spaces(2)+"---------------------------------------------------------------------------------------------------------------------"

EndProc ;Cabecalho()

;*******************************************************************************
;* Rotina para Impressao do Relatorio                                          *
;*******************************************************************************
Proc IMPFAT()

Cabecalho()
Moveto "FaturaI"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]

CONTADOR = 0
While [Numero da OF]=[FaturaC->Numero da OF]
  If CONTADOR > PARAM_NITENS_A4
     Then Rodape("Quebra")
          Cabecalho()
          Moveto "FaturaI"
          CONTADOR = 0
  EndIf

  DESC_ITEM = [Descricao do Item]
  GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM
  If Retval
     Then if not isblank(REG_ITEM["Descricao Complementar"])
             then DESC_ITEM = DESC_ITEM +"-"+REG_ITEM["Descricao Complementar"]          
          endif        
  endif
  if not isblank([Informacoes_Adicionais])
     then DESC_ITEM = DESC_ITEM +", "+[Informacoes_Adicionais]
  endif        
  DESC_ITEM=Tira_QuebraLinha(rtrim(DESC_ITEM))
          
  CONT = CONT + 1
  IMPRESSAO[CONT] =                    Spaces(2)+Format("W4,AR",[Item da OF])
  IMPRESSAO[CONT] = IMPRESSAO[CONT] + Spaces(01)+Format("W11,AL",[Codigo do Item])
  IMPRESSAO[CONT] = IMPRESSAO[CONT] + Spaces(01)+Format("W62,AL",DESC_ITEM)
  IMPRESSAO[CONT] = IMPRESSAO[CONT] + Spaces(01)+Format("W03,Al",[Unidade Fiscal])

  If [Quantidade]-Int([Quantidade])>0
     Then IMPRESSAO[CONT] = IMPRESSAO[CONT] + Format("W011.3,EIC",[Quantidade])
     Else IMPRESSAO[CONT] = IMPRESSAO[CONT] + Format("W011,EIC",[Quantidade])
  EndIf

  IMPRESSAO[CONT] = IMPRESSAO[CONT] + Format("W10.2,EIC",[Preco Unitario])
  IMPRESSAO[CONT] = IMPRESSAO[CONT] + Format("W13.2,EIC",[Preco Total])

  if len(DESC_ITEM)>61
     then imprimedescricaoitem(DESC_ITEM)
  endif        
  
  Skip
  If EOT() Then QuitLoop EndIf
  CONTADOR = CONTADOR + 1
EndWhile

If PARAM_NITENS > CONTADOR
   Then For ITEM From CONTADOR To PARAM_NITENS
            CONT = CONT + 1
            IMPRESSAO[CONT] = "" 
        EndFor
EndIf

Rodape("")

EndProc ;IMPFAT()

;*******************************************************************************
;* Rotina de Impressao de Observa‡äes                                          *
;*******************************************************************************
proc imprimedescricaoitem(s)
private TamObs, nlobs, posobs, i, s

TamObs=100

nlobs=(Len(s)-62)/tamobs
If nlobs-Int(nlobs)>0
   Then nlobs=Int(nlobs)+1
   Else nlobs=Int(nlobs)
EndIf

posobs=63
For i from 1 to nlobs
  CONT = CONT + 1
  IMPRESSAO[CONT] = Spaces(19)+SubStr(s,posobs,tamobs)

  CONTADOR = CONTADOR + 1

  posobs=posobs+tamobs
  
EndFor

endproc
        
;*******************************************************************************
;* Rotina para Impressao do Rodap‚                                            *
;*******************************************************************************
Proc Rodape(PARAM)
private ii,yu

Moveto "FaturaC"

CONT = CONT + 1
IMPRESSAO[CONT] =Spaces(2)+Fill("-",117)

If PARAM<>""
   Then CONT = CONT + 1
        IMPRESSAO[CONT] = Spaces(2)+Format("W87,AL",Tira_QuebraLinha(SubStr([Observacao na Nota Fiscal],1,80)))+
                                    "Total.............."+Format("W11.2,EIC","***********")
   Else CONT = CONT + 1
        IMPRESSAO[CONT] = Spaces(2)+Format("W87,AL",Tira_QuebraLinha(SubStr([Observacao na Nota Fiscal],1,80)))+
                                    "Total.............."+Format("W11.2,EIC",[Valor Mercadoria])
EndIf

CONT = CONT + 1
IMPRESSAO[CONT] = Spaces(2)+Format("W87,AL",Tira_QuebraLinha(SubStr([Observacao na Nota Fiscal],81,80)))

If PARAM<>""
   Then 
        IMPRESSAO[CONT] = IMPRESSAO[CONT] + "Desconto"+Format("W06.2,EIC","  **  ") + "%..."
        IMPRESSAO[CONT] = IMPRESSAO[CONT] + Format("W12.2,EIC"," ***********")

        CONT = CONT + 1
        IMPRESSAO[CONT] =Spaces(2)+Format("W87,AL",Tira_QuebraLinha(SubStr([Observacao na Nota Fiscal],161,80)))+
                                            "Total Liquido......"+Format("W11.2,EIC",("***********"))
   Else 
        IMPRESSAO[CONT] = IMPRESSAO[CONT] + "Desconto"+Format("W06.2,EIC",[Taxa de Desconto]) + "%..."
        IMPRESSAO[CONT] = IMPRESSAO[CONT] + Format("W12.2,EIC",[Valor Desconto])

        CONT = CONT + 1
        IMPRESSAO[CONT] =Spaces(2)+Format("W87,AL",Tira_QuebraLinha(SubStr([Observacao na Nota Fiscal],161,80)))+
                                            "Total Liquido......"+Format("W11.2,EIC",([Valor Mercadoria Liquido]))
EndIf
CONT = CONT + 1
IMPRESSAO[CONT] = Spaces(2)+"Cond. Pagto: "+[Descricao CondPagto]+
                  "   NP: "+StrVal([Numero de Parcelas])+
                  "   CD: "+[Composicao de Dias]+
                  "  VOLUMES: "+StrVal([Numero de Volumes])
               
CONT = CONT + 1
IMPRESSAO[CONT] = ""
                            
If PARAM=""
   Then VALOR_EXTENSO = [Valor Mercadoria]
        ESCEXT(VALOR_EXTENSO)
        CONT = CONT + 1
        IMPRESSAO[CONT] = "\020"+
                          Spaces(2)+"Eu, "+[Razao Social]+" pagarei(emos)  por  esta £nica via de NOTA PROMISSORIA,"
        CONT = CONT + 1 
        IMPRESSAO[CONT] = Spaces(2)+"referente ao fornecimento da alimenta‡Æo (lanches e refei‡äes), a quantia de "+Format("W38",SubStr(EXTENSO,1,38))
        CONT = CONT + 1
        IMPRESSAO[CONT] = Spaces(2)+Format("W55",SubStr(EXTENSO,39,55))+" em moeda corrente deste pa¡s."        
        CONT = CONT + 1
        IMPRESSAO[CONT] = ""
EndIf
;********************* IMPRESSAO DOS VENCIMENTOS **************************
CONT = CONT + 1
IMPRESSAO[CONT] = "\020" + "\027E" + Spaces(2) + "Vencimentos: "

Array DATA [9]
Array VALOR[9]
Array FPGT [9]
K=0
KV=0
Moveto "FaturaV"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While [Numero da OF]=[FaturaC->Numero da OF]
  K=K+1
  VALOR[K] = Format("W10.2,AR,EIC",[Valor])
  FPGT[K]  = Format("W08","FP: "+[Forma de Pagamento])
  DATA[K]  = Format("D13",[Data])
  If K=9
     Then VENC2()
          K=0
  EndIf
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile
If K>0
   Then If KV>1
           Then IMPRESSAO[CONT] = IMPRESSAO[CONT] + Spaces(17)
        EndIf   
        VENC2()
EndIf

If PARAM=""
   Then CONT = CONT + 1
        IMPRESSAO[CONT] = "\027F"
        CONT = CONT + 1
        IMPRESSAO[CONT] = Spaces(70)+"   /   /     -                                   "
        CONT = CONT + 1
        IMPRESSAO[CONT] = Spaces(70)+"-------------------------------------------------"
        CONT = CONT + 1
        IMPRESSAO[CONT] = Spaces(70)+"\027E"+Format("W49,AC","Data e Assinatura")+"\027F"

        CONT = CONT + 1
        IMPRESSAO[CONT] =""
        
        CONT = CONT + 1
        IMPRESSAO[CONT] ="- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"
EndIf

For ii From 1 To aux_NUMCOPIA
  For yu From 1 To DynArraySize(IMPRESSAO)
    Print File ARQIMP IMPRESSAO[yu] + "\n"
  EndFor

  If aux_NUMCOPIA=1
     Then Print File ARQIMP "\f"
          QuitLoop
     else
          if DynArraySize(IMPRESSAO) > PARAM_NITENS_A4
             Then Print File ARQIMP "\f"
                  QuitLoop
             Else if mod(ii,2)=0
                     Then Print File ARQIMP "\f"
                     else Print File ARQIMP "\n\n"
                  endif
                  NUMCOPIA=1                        
          EndIf
  EndIf   
Endfor


EndProc

;*******************************************************************************
;* Rotina de Impressao dos Vencimentos                                         *
;*******************************************************************************
Proc VENC2()
Private CONTA,I

CONTA = 0
For I From 1 to K
  CONTA = CONTA + 1
  IMPRESSAO[CONT] = IMPRESSAO[CONT] + FPGT[I] +  DATA[I] +  VALOR[I]
  If K<>I And CONTA<>3
     Then IMPRESSAO[CONT] = IMPRESSAO[CONT] + " - "
  EndIf
  If CONTA>=3
     Then CONTA = 0
          CONT = CONT + 1
          IMPRESSAO[CONT] = Spaces(15)
  EndIf   
EndFor
KV=KV+1
EndProc ;VENC2()

;*******************************************************************************
;* Rotina de Impressao dos Vencimentos                                         *
;*******************************************************************************
Proc VENC()
private i
;Substrituido por VENC2()

If KV>0
   Then IMPRESSAO[CONT] = IMPRESSAO[CONT] + Spaces(17)
EndIf
IMPRESSAO[CONT] = IMPRESSAO[CONT] + Spaces(4)
For I From 1 to K
  IMPRESSAO[CONT] = IMPRESSAO[CONT] + FPGT[I]+Spaces(2)
EndFor
IMPRESSAO[CONT] = IMPRESSAO[CONT] + ""
CONT = CONT + 1
IMPRESSAO[CONT] = Spaces(17)
For I From 1 to K
  IMPRESSAO[CONT] = IMPRESSAO[CONT] + DATA[I]+Spaces(02)
EndFor
IMPRESSAO[CONT] = IMPRESSAO[CONT] + ""
CONT = CONT + 1
IMPRESSAO[CONT] = Spaces(17)
For I From 1 to K
  IMPRESSAO[CONT] = IMPRESSAO[CONT] + VALOR[I]+Spaces(02)
EndFor
CONT = CONT + 1
IMPRESSAO[CONT] = ""

KV=KV+1
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
ArqImp=PrivDir()+"RO_0401.Txt"
If IsFile(ArqImp)
   Then Deleta_Arquivo(ARQIMP)
EndIf

CONT = 0
DynArray IMPRESSAO[]

AGUARDE("Imprimindo Romaneio -> "+NOTAFISC)

Moveto "FaturaV"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While [Numero da OF]=[FaturaC->Numero da OF]
  CONT = CONT + 1
  Skip
  If Eot() Then QuitLoop EndIF
EndWhile
Moveto "FaturaC"

Switch
  Case CONT <=3  : PARAM_NITENS = 11
  Case CONT <=6  : PARAM_NITENS = 10
  Case CONT <=9  : PARAM_NITENS =  9
  Case CONT <=12 : PARAM_NITENS =  8
EndSwitch
PARAM_NITENS_A4 = PARAM_NITENS + 31
CONT = 0

aux_NUMCOPIA=NUMCOPIA
IMPFAT()

;---- Imprime Arquivo Impressao ------------------------------------------------
ImpriArq(ARQIMP)
NUMCOPIA=aux_NUMCOPIA

Release Vars PARAM_NITENS_A4,PARAM_NITENS,K,KV,
             DATA,VALOR,FPGT,
             IMPRESSAO,CONT,aux_NUMCOPIA

Release Procs IMPFAT,VENC,VENC2,cabecalho,Rodape,imprimedescricaoitem
LIMPAGUARDE()
