;** RO_0343 ********************************************************************
;** Imprime a Digitacao do Romaneio                            ** THARDELY **  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 03/07/2013 por Bruno Carvalho
;Ultima Altera‡„o: 31/07/2013 por Nikolas
;Motivo Altera‡„o: Ajustes
;Ultima Altera‡„o: 01/08/2013 por Bruno Carvalho
;Motivo Altera‡„o: Adicionado celular do cliente no cabe‡alho do romaneio
;Ultima Altera‡„o: 01/08/2013 por Bruno Carvalho
;Motivo Altera‡„o: Ajsutes p/ impressÆo em folha normal (A4)
;Ultima Altera‡„o: 07/08/2013 por Bruno Carvalho
;Motivo Altera‡„o: Add Observa‡Æo e ajustes para folha A4 ou formulario razÆo
;Ultima Altera‡„o: 07/08/2013 por Bruno Carvalho
;Motivo Altera‡„o: Ordenando impressÆo dos itens pelo seu c¢digo
;Ultima Altera‡„o: 07/08/2013 por Nikolas
;Motivo Altera‡„o: Ajustes
;Ultima Altera‡„o: 08/08/2013 por Nikolas
;Motivo Altera‡„o: Ajustes Observa‡„o 
;Ultima Altera‡„o: 09/08/2013 por Nikolas
;Motivo Altera‡„o: Ajustes na impress„o da Observa‡„o
;Ultima Altera‡„o: 09/01/2020 por Bruno Carvalho
;Motivo Altera‡„o: Ajustes na mensagem automatica que ‚ exibida no romaneio 

;*******************************************************************************
;* Atribuindo Valores                                                          *
;*******************************************************************************
;**** N£mero de Linhas *****
PARAM_NITENS = 140      ;33 Linhas                                              ;Formulario Razao
;PARAM_NITENS = 86                                                              ;Formulario A4

;*******************************************************************************
;* Checa linha na area de impressao dos itens                                  *
;*******************************************************************************
Proc Checa_Linha(Nl)
private nl

If (CONTADOR+nl)>(PARAM_NITENS-NLINHA)
   Then RodaPe(True)
        Cabecalho()
        CONTADOR=nl
        Moveto PrivDir()+"FaturaI"
   Else CONTADOR=CONTADOR+nl
EndIf

EndProc ;Checa_Linha()

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

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

Moveto "Faturac"
Print File ARQIMP chr(27)+chr(67)+chr(33) ;Imprime 33 Linhas por pagina
Print File ARQIMP CI_10CPP
Print File ARQIMP CI_6LPP

;Print File ARQIMP "\n"
;Print File ARQIMP Format("W50,AL","                                     ")+"Impressao: "+Format("D10",Today())+"-"+Time()+ "\n\n"
;Print File ARQIMP "\027E"
;Print File ARQIMP Spaces(01)+ "ENTREGA : "+Format("W35,AL",[Endereco de entrega])+"Bairro :" +Format("W15,AL",[Bairro de Entrega])+"\n"

Print File ARQIMP "\014"
Print File ARQIMP "\027E"
Print File ARQIMP Spaces(02)+"Orcamento N§ "+Format("W06.3,AL",NOTAFISC)+ "  -   "+Format("D10",[Data de Emissao]) + "\n"
;Print File ARQIMP Spaces(02)+"Orcamento N§ "+Format("W06.3,AL",NOTAFISC)+ " "+Format("D10",Today()) + "\n"
Print File ARQIMP "\020"

Print File ARQIMP "Cliente : "+Format("W05,AL",[Codigo])+Format("W46,AL",[Razao Social])+"\n"
Print File ARQIMP "\027F"

Print File ARQIMP CI_8LPP
Print File ARQIMP "\027P"         ;Imprime 10 Caracteres por polegada

Print File ARQIMP Spaces(10)+Format("W40,AL",[Endereco])
Print File ARQIMP Format("W18,AL",[CGC])+"\n"

Print File ARQIMP Spaces(10)+Format("W20,AL",[Bairro])
Print File ARQIMP Format("W20,AL",[CEP])
Print File ARQIMP Format("W25,AL",[IE])+"\n"

Print File ARQIMP Spaces(10)+Format("W40,AL",Rtrim([Cidade])+"/"+[UF])
Print File ARQIMP Format("W25,AL",[Telefone])+"\n"

Print File ARQIMP "Vendedor: "+Format("W05,AL",[Codigo do Representante])
Print File ARQIMP Format("W35,AL",[Nome Fantasia Represent])
Print File ARQIMP Format("W25,AL",CELULAR)+"\n"

Print File ARQIMP "\015"         ;Imprime 17 Caracteres por polegada

;********************* IMPRESSAO DOS ITENS ********************************
Print File ARQIMP "----------------------------------------------------------------------------------------------------------------------"+"\n"
Print File ARQIMP Spaces(02)+"Item                                                                           Un  Quantidade  Unitario        Total"+"\n"
Print File ARQIMP "----------------------------------------------------------------------------------------------------------------------"+"\n"

NLINHA = NLINHA + 10 ;Cabe‡alho
NLINHA = NLINHA + 10 ;Rodape
 
EndProc ;(Cabecalho)

;*******************************************************************************
;* Itens                                                                       *
;*******************************************************************************
Proc Itens()

Moveto PrivDir()+"FaturaI"
Moveto [Codigo do Item]
{Image} {OrderTable} Enter {Codigo do Item} {OK} 

Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
QUANT     = 0
TOT       = 0
CONTADOR  = 0
CONT_ITEM = 0

While [Numero da OF]=[FaturaC->Numero da OF]
  Checa_Linha(1)
  
  COD_ITEM=[Codigo do Item]
  DescItem=[Descricao do Item]
  Moveto "FaturaI"            
  Moveto [Codigo do Item]
  Ativa_Lookup()
  Moveto [Codigo do Item]
  Locate COD_ITEM  
  If RetVal
     Then If [Descricao Complementar]<>""
             Then DescItem=[Descricao Complementar]
          EndIf   
  EndIf
  KeyPress "ESC"
  UnlockRecord

  Moveto PrivDir()+"FaturaI"
  CONT_ITEM = CONT_ITEM + 1
  Print File ARQIMP Spaces(01)+Format("W04,AL",CONT_ITEM)
  Print File ARQIMP Spaces(01)+Format("W12,AL",[Codigo do Item])
  Print File ARQIMP Spaces(01)+Format("W61,AL",DescItem)
  Print File ARQIMP Spaces(01)+Format("W03,Al",[Unidade Fiscal])

  If [Quantidade]-Int([Quantidade])>0
     Then Print File ARQIMP Format("W011.3,EIC",[Quantidade])
     Else Print File ARQIMP Format("W011,EIC",[Quantidade])
  EndIf

  Print File ARQIMP Format("W10.2,EIC",[Preco Unitario])
  Print File ARQIMP Format("W13.2,EIC",[Preco Total])+"\n"
  TOT   = TOT + [Preco Total] 
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

;For ITEM From CONTADOR To PARAM_NITENS
;    Print File ARQIMP "\n"
;EndFor

EndProc ;(Itens)

;*******************************************************************************
;*Rodap‚                                                                       *
;*******************************************************************************
Proc Rodape(QUEBRAFORM)
Private QUEBRAFORM

Print File ARQIMP "----------------------------------------------------------------------------------------------------------------------"+"\n"

Moveto "FaturaC"

If QUEBRAFORM
   Then Print File ARQIMP Spaces(87)+"Total.............. ***********  "+"\n"
   Else Print File ARQIMP Spaces(87)+"Total.............."+Format("W12.2,EIC",TOT)+"\n"
EndIf
Print File ARQIMP "          *** FAVOR MANTER O ENDERECO E O TELEFONE ATUALIZADOS ***"

If QUEBRAFORM 
   Then Print File ARQIMP Spaces(21)+"Desconto ****  %... ***********  "+"\n"
        Print File ARQIMP "          ***   FAVOR ENVIAR SEUS CHEQUES NO ENVELOPE ANEXADO  ***"
        Print File ARQIMP Spaces(21)+"Total Liquido...... ***********  "+"\n"
        Print File ARQIMP " SR. CONFECCIONISTA, FAZER PECA PILOTO. NAO  ACEITAMOS DEVOLUCOES DE TECIDOS CORTADOS "
   Else Print File ARQIMP Spaces(21)+"Desconto"+Format("W06.2,EIC",[Taxa de Desconto]) + "%..."
        Print File ARQIMP Format("W13.2,EIC",[Valor Desconto])+"\n"
        Print File ARQIMP "          ***   FAVOR ENVIAR SEUS CHEQUES NO ENVELOPE ANEXADO  ***"        
        Print File ARQIMP Spaces(21)+"Total Liquido......"+Format("W12.2,EIC",[Valor Mercadoria Liquido])+"\n"
        Print File ARQIMP " SR. CONFECCIONISTA, FAZER PECA PILOTO. NAO  ACEITAMOS DEVOLUCOES DE TECIDOS CORTADOS "
EndIf
Print File ARQIMP "\n"
Print File ARQIMP "\n"

;Print File ARQIMP "Cond. Pagto: "+[Descricao CondPagto]
;Print File ARQIMP "   NP: "+StrVal([Numero de Parcelas])
;Print File ARQIMP "   CD: "+[Composicao de Dias]+"\n"

If IsAssigned(ARRAY_OBS)
   Then For i From 1 To DynArraySize(ARRAY_OBS)
         Print File ARQIMP SubStr(ARRAY_OBS[i],4,Len(ARRAY_OBS[i]))+"\n"
        EndFor
        Print File ARQIMP "\n"
EndIf   

;********************* IMPRESSAO DOS VENCIMENTOS **************************
Print File ARQIMP "\020"
Print File ARQIMP "\027E"
Print File ARQIMP "Vencimentos: "

Array DATA[12]
Array VALOR[12]
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
  DATA[K]  = Format("D13",[Data])
  VALOR[K] = Format("W10.2,AR,EIC",[Valor])
  If K=9
     Then VENC()
          K=0
  EndIf
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile
If K>0
   Then VENC()
EndIf
Print File ARQIMP "\027F"

;************************* IMPRESSAO DO RODAPE *********************************
If QUEBRAFORM
   Then Print File ARQIMP "\n\n\n" 
   Else Print File ARQIMP Spaces(38)+"   /   /     -                                   " + "\n"
        Print File ARQIMP Spaces(38)+"-------------------------------------------------" + "\n"
        Print File ARQIMP Spaces(38)+"              Data e Assinatura"+"\n"
EndIf        
Print File ARQIMP CI_6LPP
Print File ARQIMP CI_10CPP

If QUEBRAFORM
   Then Print File ARQIMP "\f"
   Else Print File ARQIMP "\n\n\n\n" 
EndIf

EndProc ;(Rodape)

;*******************************************************************************
;* Rotina para Alinha Texto Justificado                                        *
;*******************************************************************************
Proc Alinha_Texto(Texto,Tamanho,Faz)
Private Tamanho, Vazio, Conta, Aux,Faz

Texto   = Ltrim(Rtrim(Texto))

If Len(Texto) > Tamanho Or Not Faz 
   Then Return Texto
EndIf

Vazio   = Tamanho - Len(Texto)
Tamanho = Len(Texto)

If Vazio=0
   Then Return Texto
EndIf   
           
Conta = 0
For wii From 1 To Tamanho   
  If Vazio = 0 Then QuitLoop EndIf
  Switch
    Case SubStr(Texto,wii,1)=" " And SubStr(Texto,wii+1,1)<>" " :
         Texto = SubStr(Texto,1,wii)+" "+SubStr(Texto,wii+1,Len(Texto))
         Vazio = Vazio - 1
         wii   = wii + 1
    Case SubStr(Texto,i,2)="  " :
         Loop
  EndSwitch
  If wii=Len(Texto) And Vazio<>0
     Then wii=1
          Loop
  EndIf
EndFor 

Return Texto

EndProc ;Alinha_Texto()

;*******************************************************************************
;* Rotina de Impressao dos Vencimentos                                         *
;*******************************************************************************
Proc VENC()

If KV>0
   Then Print File ARQIMP Spaces(13)
EndIf
For I From 1 to K
  Print File ARQIMP DATA[I]+Spaces(02)
EndFor
Print File ARQIMP "\n"
Print File ARQIMP Spaces(13)
For I From 1 to K
  Print File ARQIMP VALOR[I]+Spaces(02)
EndFor
Print File ARQIMP "\n\n"

KV=KV+1
EndProc

;*******************************************************************************
;* Rotina de Impressao da Observacao                                           *
;*******************************************************************************
Proc Imprime_Observacao(PARAM)
Private PARAM,CARACTER_OBS,CONTADOR_LINHAOBS,TITULO_OBS,CARACTER_OBS,CONTADOR,CONTROL,AUX,PosI

If [Observacao na Nota Fiscal]=""
   Then Release Vars ARRAY_OBS 
        Return
EndIf   

OBS_NF            = [Observacao na Nota Fiscal] 
CARACTER_OBS      = 118                                                         ;Limite de Caracteres na impress„o
CONTADOR_LINHAOBS = False                                                       ;Se vai ser impresso o que h  na observa‡„o ou estipularei o limite de linhas
TITULO_OBS        = "OBS.: "                                                    ;Titulo da Observa‡„o, podendo ser alterado
CARACTER_OBS      = CARACTER_OBS - Len(TITULO_OBS)                              
If CONTADOR_LINHAOBS
   Then LINHA_OBS = 4                                                           ;Quantidade de Linhas na impress„o, de acordo com o CONTADOR_LINHAOBS=False
   Else LINHA_OBS = 0    
EndIf           

Release Vars ARRAY_OBS 
DynArray ARRAY_OBS[]           
 
CONTADOR = 0            
CONTROL  = OBS_NF
PosI     = Search("\n",CONTROL)
If PosI > 0
   Then While PosI > 0
          If CONTADOR_LINHAOBS 
             Then If CONTADOR > LINHA_OBS
                     Then CONTROL = ""
                          QuitLoop
                  EndIf
          EndIf   
          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
          If Not CONTADOR_LINHAOBS
             Then LINHA_OBS = LINHA_OBS + LINHA
          EndIf      
          For i From 1 To LINHA
            CONTADOR = CONTADOR + 1
            
            If CONTADOR_LINHAOBS 
               Then If CONTADOR > LINHA_OBS
                     Then QuitLoop
                  EndIf
            EndIf 
            
            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  CONTADOR = CONTADOR + 1 
                 ARRAY_OBS[CONTADOR] = AlinhM(StrVal(CONTADOR),3)+Spaces(Len(TITULO_OBS)) + Ltrim(Rtrim(SubStr(CONTROL,1,Len(CONTROL)))) 
        EndIf          
   Else LINHA = Int(Len(CONTROL) / CARACTER_OBS)
                If (Len(CONTROL) / CARACTER_OBS) - LINHA > 0
                   Then LINHA = LINHA + 1
                EndIf
        If CONTADOR_LINHAOBS 
           Then If LINHA > LINHA_OBS
                   Then LINHA = LINHA_OBS
                EndIf
        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 ;Imprime_Observacao()

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

NLINHA = 0

CELULAR=""
Moveto [Codigo]
Ativa_Lookup()
Moveto [Codigo]
Locate [FaturaC->Codigo]
If RetVal
   Then If [Celular]<>""
           Then CELULAR=[Celular]
        EndIf
EndIf  
KeyPress "ESC" 
                    
AGUARDE("Imprimindo Romaneio -> "+NOTAFISC)
Do_It!                    
                     
; ***** FATURAI ****************************************************************
Copy "\\Base\\Sistemas\\Vendas\\FaturaI"  PrivDir()+"FaturaI"
CoEditKey
{TableAdd} TypeIn PrivDir()+"FaturaI"  Enter

Moveto "Faturai"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While [Numero da OF]=[FaturaC->Numero da OF]
  CopyToArray REG_FATURAI
          
  Moveto PrivDir()+"Faturai"
  End Down
  CopyFromArray REG_FATURAI
  
  Moveto "Faturai"
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

Moveto "FaturaC"
Imprime_Observacao("OBS")

AGUARDE("Imprimindo Romaneio -> "+NOTAFISC)
Cabecalho()
Itens()
Rodape(False) 

Do_It!
Moveto PrivDir()+"Faturai"
ClearImage

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

Moveto "FaturaC"
CoEditKey

Release Vars VALOR,DATA,FAZ_UMAVEZ
Release Procs IMPFAT,VENC
LIMPAGUARDE()