;** ListRegr *******************************************************************
;*  Rotina para gera‡Æo de lista para sele‡Æo +/- para filtro de Ask           *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 23/03/2019 por Anivel Augusto Rodrigues 
;Ultima Alteracao: 22/05/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado TG_REPRESEN
;Ultima Alteracao: 31/10/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado TG_DESTIN
;Ultima Alteracao: 22/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado TG_MARCA                
;Ultima Alteracao: 07/12/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado TG_EMPRESATE 
;Ultima Alteracao: 01/02/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado TG_TPLANC           
;Ultima Alteracao: 06/02/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustess TG_DESTIN                        
;Ultima Alteracao: 09/03/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado TG_CONTA            
;Ultima Alteracao: 14/05/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado TG_TPITEM *Apenas p/ Tipos que controlam estoque
;Ultima Alteracao: 15/05/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_CONTA filtrar empresa
;Ultima Alteracao: 30/07/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado TG_TIPOEST          

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog Grade                                      *
;*******************************************************************************
Proc ListaRegra_AtualizaItemArray(indice,op)
private indice,op,opold 

opold=SubStr(ListaRegra_Array[indice],ListaRegra_ColunaSelecao,1)
switch
  case op=" " and opold=" "     : op=chr(17)
  case op=" " and opold=chr(17) : op=" "      
  case op=" " and opold="-"     : op=" "      
endswitch

ListaRegra_Array[indice]=SubStr(ListaRegra_Array[indice],1,ListaRegra_ColunaSelecao-1)+op
endproc

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog Grade                                      *
;*******************************************************************************
Proc ListaRegra_ChecaOpcoesArray(tipo)
private tipo,wi,s1,s2,s3,s4,op,vrretorno,wcop1,wcop2,result

result=true

s1    =""
s4    =""

wcop1  =0
wcop2  =0
for wi from 1 to dynarraysize(ListaRegra_Array)
  
         op=      substr(ListaRegra_Array[wi],ListaRegra_ColunaSelecao,1)
  vrretorno=rtrim(substr(ListaRegra_Array[wi],ListaRegra_InicioCampoRetorno,ListaRegra_TamanhoCampoRetorno))

  s2=""
  s3=""
  switch
    case op=chr(17) : s2=       "\""+vrretorno+"\""       wcop1=wcop1+1  s4=s4+    vrretorno+"|"
    case op="-"     : s2="not "+"\""+vrretorno+"\""       wcop2=wcop2+1  s4=s4+"-"+vrretorno+"|"
  endswitch

  if not isblank(s1)
     then
          switch
            case op=chr(17) : s2=" or "+s2
            case op="-"     : s2=", "  +s2
          endswitch
  endif   
  s1=s1+s2+s3

endfor

switch
  case tipo=13:
    switch
      case isblank(s1)           : Mensagem("NÆo existe sele‡Æo !")           result=false
      case wcop1>0 and wcop2>0   : Mensagem("Sele‡Æo inv lida [+] com [-] ?") result=false 
    endswitch
    
    switch
      Case ListaRegra_CampoDoShowDialog="TG_TPPAGTO"         : 
        VSDGTPPAGTO="?"  VSDGNOMTPPAGTO="Op: "+s4  ListaRegra_VSDGTPPAGTO=s1  ListaRegra_TG_TPPAGTO=s4 ListaRegra_VSDGTPPAGTO_Ativo=True     

      Case ListaRegra_CampoDoShowDialog="TG_TPCART"          : 
        VSDGTPCART ="?"  VSDGNOMCART   ="Op: "+s4  ListaRegra_VSDGTPCART =s1  ListaRegra_TG_TPCART =s4 ListaRegra_VSDGTPCART_Ativo =True     
     
     Case ListaRegra_CampoDoShowDialog="TG_TPLANC"          : 
        VSDGTPLANC ="?"  VSDGNOMLANC   ="Op: "+s4  ListaRegra_VSDGTPLANC =s1  ListaRegra_TG_TPLANC =s4 ListaRegra_VSDGTPLANC_Ativo =True
     
     Case ListaRegra_CampoDoShowDialog="TG_REPRESEN"         : 
        VSDGREPRESEN ="?"  VSDGNOMREPR   ="Op: "+s4  ListaRegra_VSDGREPRESEN =s1  ListaRegra_TG_REPRESEN =s4 ListaRegra_VSDGREPRESEN_Ativo =True
     
     Case ListaRegra_CampoDoShowDialog="TG_DESTIN"           : 
        VSDGDESTIN ="?"  VSDGNOMDESTIN   ="Op: "+s4  ListaRegra_VSDGDESTIN =s1  ListaRegra_TG_DESTIN =s4 ListaRegra_VSDGDESTIN_Ativo =True
           
     Case ListaRegra_CampoDoShowDialog="TG_MARCA"            :
        VSDGMARCA ="?"  VSDGNOMMARCA   ="Op: "+s4  ListaRegra_VSDGMARCA =s1  ListaRegra_TG_MARCA =s4 ListaRegra_VSDGMARCA_Ativo =True

     Case ListaRegra_CampoDoShowDialog="TG_EMPRESATE"        : 
        VSDGEMPRESA ="?"  VSDGNOMEMP    ="Op: "+s4  ListaRegra_VSDGEMPRESA =s1  ListaRegra_TG_EMPRESATE =s4 ListaRegra_VSDGEMPRESA_Ativo =True
           
     Case ListaRegra_CampoDoShowDialog="TG_CONTA"            : 
        VSDGCONTA   ="?"  VSDGNOMCONTA  ="Op: "+s4  ListaRegra_VSDGCONTA   =s1  ListaRegra_TG_CONTA     =s4 ListaRegra_VSDGCONTA_Ativo =True
     
     Case ListaRegra_CampoDoShowDialog="TG_TPITEM"           : 
        VSDGTPITEM   ="?"  VSDGNOMTPITEM  ="Op: "+s4  ListaRegra_VSDGTPITEM   =s1  ListaRegra_TG_TPITEM     =s4 ListaRegra_VSDGTPITEM_Ativo =True
           
     Case ListaRegra_CampoDoShowDialog="TG_TIPOEST"          : 
        VSDGTIPOEST  ="?"  VSDGDESCTIPOEST="Op: "+s4  ListaRegra_VSDGTIPOEST  =s1 ListaRegra_TG_TIPOEST     =s4 ListaRegra_VSDGTIPOEST_Ativo =True
           
    endswitch

  case tipo=27 and ( (wcop1>0 and wcop2 >0) or isblank(s1) ):
    switch
     
      Case ListaRegra_CampoDoShowDialog="TG_TPPAGTO"      :
        VSDGTPPAGTO=""   VSDGNOMTPPAGTO=""        ListaRegra_VSDGTPPAGTO=""   ListaRegra_TG_TPPAGTO=""    ListaRegra_VSDGTPPAGTO_Ativo=False    
     
      Case ListaRegra_CampoDoShowDialog="TG_TPCART"       :
        VSDGTPCART =""   VSDGNOMCART   =""        ListaRegra_VSDGTPCART =""   ListaRegra_TG_TPCART =""    ListaRegra_VSDGTPCART_Ativo =False    
        
      Case ListaRegra_CampoDoShowDialog="TG_TPLANC"       :
        VSDGTPLANC =""   VSDGNOMLANC   =""        ListaRegra_VSDGTPLANC =""   ListaRegra_TG_TPLANC =""    ListaRegra_VSDGTPLANC_Ativo =False
     
     Case ListaRegra_CampoDoShowDialog="TG_REPRESEN"       :
        VSDGREPRESEN ="" VSDGNOMREPR   =""        ListaRegra_VSDGREPRESEN ="" ListaRegra_TG_REPRESEN =""  ListaRegra_VSDGREPRESEN_Ativo =False
     
     Case ListaRegra_CampoDoShowDialog="TG_DESTIN"       :
        VSDGDESTIN =""   VSDGNOMDESTIN   =""      ListaRegra_VSDGDESTIN =""   ListaRegra_TG_DESTIN =""    ListaRegra_VSDGDESTIN_Ativo =False    
        
     Case ListaRegra_CampoDoShowDialog="TG_MARCA"       :
        VSDGMARCA =""    VSDGNOMMARCA   =""       ListaRegra_VSDGMARCA =""    ListaRegra_TG_MARCA =""     ListaRegra_VSDGMARCA_Ativo   =False    

     Case ListaRegra_CampoDoShowDialog="TG_EMPRESATE"        : 
        VSDGEMPRESA =""  VSDGNOMEMP    =""        ListaRegra_VSDGEMPRESA =""  ListaRegra_TG_EMPRESATE ="" ListaRegra_VSDGEMPRESA_Ativo =False

     Case ListaRegra_CampoDoShowDialog="TG_CONTA"            : 
        VSDGCONTA   =""   VSDGNOMCONTA  =""       ListaRegra_VSDGCONTA   =""  ListaRegra_TG_CONTA     ="" ListaRegra_VSDGCONTA_Ativo =False
     
     Case ListaRegra_CampoDoShowDialog="TG_TPITEM"            : 
        VSDGTPITEM =""   VSDGNOMTPITEM   =""        ListaRegra_VSDGTPITEM =""   ListaRegra_TG_TPITEM =""    ListaRegra_VSDGTPITEM_Ativo =False

     Case ListaRegra_CampoDoShowDialog="TG_TIPOEST"          : 
        VSDGTIPOEST=""   VSDGDESCTIPOEST=""         ListaRegra_VSDGTIPOEST=""   ListaRegra_TG_TIPOEST=""    ListaRegra_VSDGTIPOEST_Ativo=False
        
    endswitch

endswitch

return result
endproc

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog Grade                                      *
;*******************************************************************************
Proc ListaRegra_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento,TECLA,MSG_CAMPO,Temp 

Temp=True

TECLA    ="//Esc=Retornar  Enter=Confirmar  "+Chr(24)+Chr(25)+"=Mover  Barra de espa‡o=Seleciona/Desmarca"
MSG_CAMPO=Completa("Selecione as op‡äes: [+]=Selecionar  [-]=Ignorar",80," ")

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf

If Disparo="SELECT" 
   Then 
        ListaRegra_AtualizaItemArray(ListaRegra_ArrayElement," ")
EndIf


If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9   Or 
           Evento["KeyCode"] = -15    : Temp=False

      Case Evento["KeyCode"] = 43     : ListaRegra_AtualizaItemArray(ListaRegra_ArrayElement," ")
      Case Evento["KeyCode"] = 45     : ListaRegra_AtualizaItemArray(ListaRegra_ArrayElement,"-")
           
      Case Evento["KeyCode"] = 27     : 
        switch
          case campo="ListaRegra_NO"        : campo="ListaRegra_TG_OPCAO"
          case campo="ListaRegra_TG_OPCAO"  : campo="ListaRegra_NO"
        endswitch
      Case Evento["KeyCode"] = 13     : 
        switch
          case campo="ListaRegra_TG_OPCAO"  : campo="ListaRegra_YES"
          case campo="ListaRegra_YES"       : AcceptDialog
          case campo="ListaRegra_NO"        : CancelDialog
        endswitch
   EndSwitch
EndIf

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc      


;*******************************************************************************
;* Rotina de Selecionar Grade                                                  *
;*******************************************************************************
Proc ListaRegra_Seleciona_Opcoes()
Private LJ,AJ,wc,slista,vrcampo,processa,ListaRegra_ArrayContador       

If IsAssigned(ListaRegra_Array)
   Then Release Vars ListaRegra_Array
EndIf
DynArray ListaRegra_Array[]

slista =""
vrcampo=""
wc    =0
Scan
  processa=true

  Switch
    Case ListaRegra_CampoDoShowDialog="TG_TPPAGTO"      :
      If IsAssigned(ListaRegra_TG_TPPAGTO) then slista=ListaRegra_TG_TPPAGTO    endif
      vrcampo=[Tipo do Pagamento]
      
      wc=wc+1
      ListaRegra_Array[wc]=format("W20,AL",[Descricao Tipo Pagamento])+Chr(179)+format("W2,AL",[Tipo do Pagamento])+chr(179)    LJ=25

    Case ListaRegra_CampoDoShowDialog="TG_TPCART"       :
      If IsAssigned(ListaRegra_TG_TPCART)  then slista=ListaRegra_TG_TPCART     endif
      vrcampo=[Tipo de Lancamento]
      
      wc=wc+1
      ListaRegra_Array[wc]=format("W20,AL",[Descricao do Lancamento ])+Chr(179)+format("W1,AL",[Tipo de Lancamento])+chr(179)   LJ=24
   
    Case ListaRegra_CampoDoShowDialog="TG_TPLANC"       :
      If IsAssigned(ListaRegra_TG_TPLANC)  then slista=ListaRegra_TG_TPLANC     endif
      vrcampo=[Tipo de Lancamento]
      
      wc=wc+1
      ListaRegra_Array[wc]=format("W20,AL",[Descricao do Lancamento ])+Chr(179)+format("W1,AL",[Tipo de Lancamento])+chr(179)   LJ=24
      
    Case ListaRegra_CampoDoShowDialog="TG_REPRESEN"     :
      If IsAssigned(ListaRegra_TG_REPRESEN) then slista=ListaRegra_TG_REPRESEN    endif
      vrcampo=[Codigo do Representante]
      
      wc=wc+1
      ListaRegra_Array[wc]=format("W20,AL",[Nome Fantasia Represent])+Chr(179)+format("W4,AL",[Codigo do Representante])+chr(179)  LJ=27
    
    Case ListaRegra_CampoDoShowDialog="TG_DESTIN"     :
      If IsAssigned(ListaRegra_TG_DESTIN) then slista=ListaRegra_TG_DESTIN    endif
      vrcampo=[Codigo da Destinacao]
      
      wc=wc+1
      ListaRegra_Array[wc]=format("W30,AL",[Descricao da Destinacao])+Chr(179)+format("W1,AL",[Tipo Movimento Estoque])+Chr(179)+
                           format("W3,AL",[Codigo da Destinacao])+chr(179)  LJ=38

    Case ListaRegra_CampoDoShowDialog="TG_MARCA"     :
      If IsAssigned(ListaRegra_TG_MARCA) then slista=ListaRegra_TG_MARCA    endif
      vrcampo=[Codigo da Marca]
      
      wc=wc+1
      ListaRegra_Array[wc]=format("W30,AL",[Descricao da Marca     ])+Chr(179)+format("W3,AL",[Codigo da Marca     ])+chr(179)  LJ=36

    Case ListaRegra_CampoDoShowDialog="TG_EMPRESATE"     :
      If IsAssigned(ListaRegra_TG_EMPRESATE) then slista=ListaRegra_TG_EMPRESATE    endif
      vrcampo=[Codigo da Empresa]          
      
      wc=wc+1
      ListaRegra_Array[wc]=format("W20,AL",[Nome Fantasia Empresa])+Chr(179)+format("W4,AL",[Codigo da Empresa])+chr(179)  LJ=27
    
    Case ListaRegra_CampoDoShowDialog="TG_CONTA"      :
      If IsAssigned(ListaRegra_TG_CONTA)  then slista=ListaRegra_TG_CONTA     endif
      vrcampo=[Codigo da Conta]        
      
      processa=false
      if VSDGEMPRESA="0000" or 
         VSDGEMPRESA=""     or
         VSDGEMPRESA=[Codigo da Empresa]
         Then processa=true
              wc=wc+1
              ListaRegra_Array[wc]=format("W30,AL",[Descricao da Conta ])+Chr(179)+format("W1,AL",[Tipo da Conta])+Chr(179)+
                                   format("W4,AL",[Codigo da Conta])+chr(179)+
                                   format("W25,AL",[Nome Fantasia Empresa]+"/"+[Codigo da Empresa])+chr(179) LJ=65
      endif   

    Case ListaRegra_CampoDoShowDialog="TG_TPITEM"       :
      If IsAssigned(ListaRegra_TG_TPITEM)  then slista=ListaRegra_TG_TPITEM     endif
      vrcampo=[Tipo do Item]
      
      processa=false
      If SubStr([Controla Estoque],1,1)="S"
         Then processa=true
              wc=wc+1
              ListaRegra_Array[wc]=format("W20,AL",[Descricao Tipo do Item])+Chr(179)+format("W1,AL",[Tipo do Item])+chr(179)   LJ=24
      EndIf        

    Case ListaRegra_CampoDoShowDialog="TG_TIPOEST"      :
      If IsAssigned(ListaRegra_TG_TIPOEST)  then slista=ListaRegra_TG_TIPOEST     endif
      vrcampo=[Tipo do Item]
      
      wc=wc+1
      ListaRegra_Array[wc]=format("W30,AL",[Descricao Tipo do Item])+Chr(179)+
                           format("W1,AL",[Tipo do Item           ])+chr(179)     LJ=34
  endswitch

  If processa
     Then switch
            case search("-"+vrcampo+"|",slista)>0  : ListaRegra_Array[wc]=ListaRegra_Array[wc]+"-" 
            case search(    vrcampo+"|",slista)>0  : ListaRegra_Array[wc]=ListaRegra_Array[wc]+chr(17)
            otherwise                              : ListaRegra_Array[wc]=ListaRegra_Array[wc]+" "
          endswitch
  EndIf
endscan  
ClearImage

;-------------------------------------------------------------------------------
                       
If DynArraySize(ListaRegra_Array)=0
   Then Mensagem("Tabela sem Registros !")
        Return
EndIf

ListaRegra_ArrayContador=DynArraySize(ListaRegra_Array)
AJ=ListaRegra_ArrayContador
If AJ>13
   Then AJ=13
   Else If AJ<3 Then AJ=3 EndIf
EndIf

titl=ltrim(Format("W4,EIC",ListaRegra_ArrayContador))+" registros"

while true
  Showdialog ListaRegra_TituloShowDialog Proc "ListaRegra_Dialog"
    Trigger "OPEN","ARRIVE","SELECT"
      Key "TAB","ReverseTab","ENTER","ESC",43,45
        @ 01,00 height AJ+6 width LJ+6
  
    Label  @ 00,00 "Op‡äes: "+titl  For "ListaRegra_TG_OPCAO"
    PickDynArray @01,01 Height AJ width LJ+2
     Columns 1 
      ListaRegra_Array
       Tag "ListaRegra_TG_OPCAO"
        To ListaRegra_ArrayElement
  
      Pushbutton @ AJ+2,00 width 11 "~O~k"      OK     Default Value "Ok" Tag "ListaRegra_YES" To ListaRegra_BottonValue
      Pushbutton @ AJ+2,13 width 11 "~C~ancela" CANCEL                    Tag "ListaRegra_NO"  To ListaRegra_BottonValue

  EndDialog
  If RetVal
     Then 
          if ListaRegra_ChecaOpcoesArray(13) 
             then ListaRegra_Result=True
                  quitloop
          endif
     Else
          ListaRegra_ChecaOpcoesArray(27)
          quitloop
  endif      

endwhile


Release vars titl,ListaRegra_ArrayContador 
EndProc   



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

ListaRegra_Seleciona_Opcoes()

