;** RO_0227P *******************************************************************
;** Imprime cupom item para presente   impressora T‚rmica EPSON    * PADRAO *  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 15/04/2021 por Anivel Augusto Rodrigues
;Ultima Alteracao: 16/04/2021 por Bruno Carvalho                            
;Motivo Alteracao: Adicionado showdialog com a rela‡Æo dos itens da nota a ser impresso no cupom 
;Ultima Alteracao: 19/04/2021 por Anivel Augusto Rodrigues                            
;Motivo Alteracao: Ajustes mensagens, layout, rodape, qtd, confirmar excluir 

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

If Not IsAssigned(NOMEMPRESA) Then NOMEMPRESA="" EndIf

Print File ARQIMP EPSON_INICIALIZA_IMPRESSAO
Print File ARQIMP Fill("=",48)+"\n"
Print File ARQIMP "EMISSAO: "+Format("D13",Today())+"-"+Time()+"  "+
                  [FaturaC->Docto Nota Gerada]+"/"+[FaturaC->Numero Nota Gerada]+"-"+[FaturaC->Serie Nota Gerada]+"\n\n"

Print File ARQIMP Format("W48,AC",EPSON_NEG_ON+" SIRI - CUPOM/PRESENTE "+EPSON_NEG_OFF)+"\n" 

Print File ARQIMP Fill("-",48)+"\n"
Print File ARQIMP Spaces(01)+"PESSOA  : "
Print File ARQIMP Format("W05,AL",[Codigo])+Format("W31,AL",[Razao Social])+"\n"
Print File ARQIMP Spaces(11)+Format("W22,AL",[CGC])+Format("W15,AL",[Telefone])+"\n"
Print File ARQIMP Spaces(01)+"ENDERECO: "+ Format("W36,AL",[Endereco])+"\n"
Print File ARQIMP Spaces(11)             + [Bairro]+ ","+[Cidade]+","+[UF]+"\n\n"

;******************************** IMPRESSAO DOS ITENS ********************************
Print File ARQIMP " CODIGO      DESCRICAO                   QTDE/UN"+"\n"                
Print File ARQIMP Fill("-",48)+"\n"

For xi From 1 To ArraySize(Array_Registro)
  Print File ARQIMP Spaces(01)+Format("W12,AL",SubStr(Array_Registro[xi],1,10))+Format("W33",SubStr(Array_Registro[xi],12,30))+"\n"
  Print File ARQIMP Spaces(35)+Format("W10,EIC",SubStr(Array_Registro[xi],50,10))+"/"+SubStr(Array_Registro[xi],47,2)+"\n"
Endfor

Moveto "FaturaC"
Print File ARQIMP Fill("-",48)+"\n"
Print File ARQIMP Format("W48,AC",[FaturaC->Razao Social])+"\n"
Print File ARQIMP Fill("=",48)+"\n"
Print File ARQIMP "\n\n\n\n\n\n"
Print File ARQIMP EPSON_GUILHOTINA

EndProc ; (IMPRO)

;*******************************************************************************
;* Rotina de Entra Reajuste de Quantidade                                      *
;*******************************************************************************
Proc RO_0227P_SD_Consulta_MudaQuantidade(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento,REGISTRO

Temp=True
TECLA="Esc=Retornar  "
MSGCAMPO=""

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: 
           If Campo="I_UN_Item" 
             Then Seleciona_Opcoes("Unidade","F1_Temp")
          EndIf
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="I_Quantidade"     : CancelDialog
          EndSwitch
     Case Evento["KeyCode"] = 13:      
          Temp=False
          Switch
            Case Campo="I_Quantidade"        : 
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 Switch
                   Case VSD_I_Quantidade<=0 :
                        fastmsg("Quantidade inv lida !")
                   Case VSD_I_Quantidade>ANT_QTD :
                        fastmsg("Quantidade maior inv lida !")
                   Case VSD_I_Quantidade>0                     :
                        Array_Registro[Indice] = SubStr(Array_Registro[Indice],1,49)+Format("W10,EIC",VSD_I_Quantidade)+" "+
                                                  SubStr(Array_Registro[Indice],61,len(Array_Registro[Indice]))
                        AcceptDialog
                 EndSwitch
          EndSwitch
          RefreshDialog
   EndSwitch
EndIf

SelectControl Campo

MontaRodapeSD(MSGCAMPO, TECLA)
RefreshDialog

Return Temp

EndProc ;RO_0227P_SD_Consulta_MudaQuantidade()

;*******************************************************************************
;* Rotina Principal De Reajuste de Quantidade                                  *
;*******************************************************************************
Proc RO_0227P_MudaQuantidade()
Private QTD,REG_ITEM,ITEM_OF                                     

Indice = ControlValue("TG_Registro")
QTD     = RO_0227P_Ajusta_Quantidade(RO_0227P_Pega_Valor_String("Quantidade",Indice)) 
ITEM_OF = NumVal(Ltrim(Rtrim(SubStr(Array_Registro[Indice],81,5))))
 
GetRecord "FaturaI" [FaturaC->Numero da OF],ITEM_OF To REG_ITEM
If ReTVal 
   Then ANT_QTD = REG_ITEM["Quantidade"]  
   Else ANT_QTD = QTD
EndIf

VSD_I_Quantidade     = QTD
                                                                                                                
Showdialog "Quantidade" Proc "RO_0227P_SD_Consulta_MudaQuantidade" 
  Trigger "OPEN","ARRIVE","UPDATE","CLOSE"
  Key "ENTER","ESC","INS","F8","F9","F1"
   @ 10,20 height 05 width 20

   Label  @ 00,00 "" For "I_Quantidade"
   Accept @ 01,02 Width 14 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade

Enddialog

EndProc ;RO_0227P_MudaQuantidade()
 
;*******************************************************************************
;* Rotina para pegar valor da string                                           *
;*******************************************************************************
Proc RO_0227P_Pega_Valor_String(PARAM,POSICAO)
Private PARAM, RESULT, PosI, RO_0227P_QTD
             
RESULT = ""              
Switch
  Case PARAM = "Codigo do Item"     : RESULT = SubStr(Array_Registro[POSICAO],71,10)
  Case PARAM = "Preco do Item"      : RESULT = Ltrim(Rtrim(SubStr(Array_Registro[POSICAO],61,9)))
  Case PARAM = "Quantidade"         : RESULT = Ltrim(Rtrim(SubStr(Array_Registro[POSICAO],50,10)))
  Case PARAM = "Unidade"            : RESULT = Ltrim(Rtrim(SubStr(Array_Registro[POSICAO],47,2)))                    
EndSwitch

Return RESULT    
                                                    
EndProc ;RO_0227P_Pega_Valor_String()

;*******************************************************************************
;* Rotina para limpar array e variaveis com informa‡Æo dos itens               *
;*******************************************************************************
Proc RO_0227P_Verifica_Array_Registro()

If ArraySize(Array_Registro)=0 Or (ArraySize(Array_Registro)=1 And Rtrim(Array_Registro[1])="")
   Then Return False
   Else Return True
EndIf

EndProc ;RO_0227P_Verifica_Array_Registro()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc RO_0227P_SD_Consulta_Itens_Nota(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento,ct

Temp=True
TECLA    =""
MSGCAMPO=""

If INICIO_DIALOG
   Then Campo="TG_Registro"
        INICIO_DIALOG=False 
        Item=RO_0227P_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
EndIf

If Disparo="UPDATE" And Campo="TG_Registro"
   Then Temp=True
        Item=RO_0227P_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
        Return Temp
EndIf

If Disparo="EVENT" And Evento["Type"]="KEY" Then
    Switch
     Case Evento["KeyCode"] = 9 Or Evento["KeyCode"] = -15:
          Temp=False        
     Case Evento["KeyCode"] = -67 Or Evento["KeyCode"] = "F9" :
          If RO_0227P_Verifica_Array_Registro()
             Then FAZ_PROCESSO= True
                  AcceptDialog
             else fastmsg("Sem itens !")     
          EndIf
     Case Evento["KeyCode"] = -83 And Campo="TG_Registro":
          If RO_0227P_Verifica_Array_Registro()
             Then Indice = ControlValue("TG_Registro")
                  Item = RO_0227P_Pega_Valor_String("Codigo do Item",Indice)
                  ;;ConfGeral("Confirma a exclus„o do item "+Item+" desta rela‡Æo?")
                  Ok="S"
                  If Ok="S"
                     Then Array_Registro[Indice]=""
        
                          DynArray Array_RegistroI[]
                          c=0
                          For i From 1 To ArraySize(Array_Registro)
                            If IsBlank(Array_Registro[i]) Then Loop EndIf
                            c=c+1
                            Array_RegistroI[c]=Array_Registro[i]
                          EndFor
        
                          If DynArraySize(Array_RegistroI)>0
                             Then Release Vars Array_Registro
                                  Array Array_Registro[DynArraySize(Array_RegistroI)]
                                  For i From 1 To DynArraySize(Array_RegistroI)
                                    Array_Registro[i]=Array_RegistroI[i]
                                  EndFor
                                  Release Vars Array_RegistroI
                                  ArrayElement = Indice
                                  WCSW_NITENS = ArraySize(Array_Registro)
                             Else WCSW_NITENS = 0
                                  Array Array_Registro[1]
                                  Array_Registro[1]=""    
                          EndIf
                  EndIf
             else fastmsg("Sem itens !")     
          EndIf
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_Registro"   :   
                 If RO_0227P_Verifica_Array_Registro()
                    Then MSG="Deseja sair desta rela‡Æo ?"
                         If Not ConfGeral(MSG)
                            Then Return  
                         EndIf
                 EndIf                        
                 CHAVEI=1
                 CancelDialog
          EndSwitch

     Case Evento["KeyCode"] =  13:  
          Temp=False
          If RO_0227P_Verifica_Array_Registro()
             Then RO_0227P_MudaQuantidade()
          EndIf     
   EndSwitch
EndIf

SelectControl Campo
Switch
  Case Campo="TG_Registro":
       MSGCAMPO=" "+ltrim(Format("W5",WCSW_NITENS)+" iten(s)")
       TECLA="Esc=Retornar  =Selecionar  Del=Excluir  Enter=Altera/Qtde  F9=ImprimirCupom" 
EndSwitch

MontaRodapeSD(MSGCAMPO, TECLA)
RefreshDialog                                                                       

Return Temp

EndProc ;RO_0227P_SD_Consulta_Itens_Nota() 

;*******************************************************************************
;* Ajusta Quantidade                                                           *
;*******************************************************************************
Proc RO_0227P_Ajusta_Quantidade(QTD)
Private QTD

If QTD=""
   Then QTD = BlankNum()
   Else PosI = Search(".",QTD)
        If PosI>0
           Then QTD = SubStr(QTD,1,PosI-1)+SubStr(QTD,PosI+1,Len(QTD))
        EndIf
        PosI = Search(",",QTD)
        If PosI>0
           Then QTD = SubStr(QTD,1,PosI-1)+"."+SubStr(QTD,PosI+1,Len(QTD))
        EndIf
        QTD = NumVal(QTD)    
EndIf 

Return QTD

EndProc ;RO_0227P_Ajusta_Quantidade()


;*******************************************************************************
;* Rotina para processar dados                                                 *
;*******************************************************************************
Proc RO_0227P_Itens_Nota()
Private Contador,Array_RegistroI,ANT_TAB,ANT_FIE

ANT_TAB = Table() 
ANT_FIE = Field() 

FAZ_PROCESSO = False
Contador     = 0
DynArray Array_RegistroI[]

Moveto "FaturaI"
Scan
  Contador = Contador + 1
  Array_RegistroI[Contador] = Completa([Codigo do Item],11," ")+
                              Completa(Ltrim(SubStr([Descricao do Item],1,30)),34," ")+" "+
                              Completa([Unidade Fiscal],02," ")+" "+
                              Format("W10,EIC",[Quantidade])+" "+   
                              Format("W9.2,EIC",[Preco Unitario])+" "+
                              Completa([Codigo do Item],10," ")+
                              Format("W5",[Item da OF])       
EndScan    

If DynArraySize(Array_RegistroI)>0
   Then Release Vars Array_Registro
        Array Array_Registro[DynArraySize(Array_RegistroI)]          
                
        For i From 1 To DynArraySize(Array_RegistroI)
          Array_Registro[i]=Array_RegistroI[i]
        EndFor
        Release Vars Array_RegistroI
        
        WCSW_NITENS   = ArraySize(Array_Registro)
        INICIO_DIALOG = True
        
        tit = "  C¢digo     Descri‡„o do Item                  Un       Qtde    PrUnit"
        Sw_Item_Pesquisado = ""

        While True
          ShowDialog "[Itens da NFCe "+[FaturaC->Numero Nota Gerada]+"] - Cupom de Presente" Proc "RO_0227P_SD_Consulta_Itens_Nota"
          Trigger "OPEN","ARRIVE","CLOSE","SELECT"
          Key "F1","ENTER","ESC",-82,-67,-83,"F9",
          -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
          @ 04,01   Height 17 Width 75
          @ 00,00 ?? tit
          
          PickArray @01,01 Height 12 width 71
          Columns 1
            Array_Registro
             Tag "TG_Registro"
              To ArrayElement
   

          @ 14,11 ?? "- Selecione/altere os itens que deseja imprimir"

          EndDialog
          QuitLoop
        EndWhile
EndIf     
Moveto ANT_TAB
Moveto Field ANT_FIE 

Return FAZ_PROCESSO
   
EndProc ;RO_0227P_Itens_Nota()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If RO_0227P_Itens_Nota()
   Then ARQIMP=PrivDir()+"RO_0227P.Txt"
        If IsFile(ARQIMP)
           Then Deleta_Arquivo(ARQIMP)
        EndIf
   
        NUMCOPIA=2
        MSGDISPOSITIVO=OpcaoC
        DispositivoI("PRS")
        If OK<>""
           Then IMPRO() 
        EndIf
        
        AGUARDE("Imprimindo Cupom Presente -> "+[FaturaC->Numero Nota Gerada])
        
        ;---- Imprime Arquivo Impressao ------------------------------------------------
        ImpriArq(ARQIMP)
EndIf

Release Procs IMPRO,RO_0227P_Itens_Nota,RO_0227P_SD_Consulta_MudaQuantidade,RO_0227P_Itens_Nota,
              RO_0227P_MudaQuantidade,RO_0227P_Pega_Valor_String,RO_0227P_Verifica_Array_Registro,
              RO_0227P_SD_Consulta_Itens_Nota,RO_0227P_Ajusta_Quantidade 