  ;** FT_EXPDS *****************************************************************
;*  Rotina de faturamento de ordem de expedicao sem Pedido                     *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 22/04/2010 por Anivel Augusto Rodrigues
;Ultima Alteracao: 06/05/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Usar Pedido/Expedicao para Entrada
;Ultima Alteracao: 09/02/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Expedicao FATURADA para devolu‡Ćo
;Ultima Alteracao: 17/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN=400 Confec‡Ćo SIMPLES NACIONAL               
;Ultima Alteracao: 23/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATIVEMPR para pega_CFOP                            
;Ultima Alteracao: 01/11/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes dados do item/tributa‡äes                          
;Ultima Alteracao: 26/09/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Usando_Expedicao                   
;Ultima Alteracao: 23/12/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tributos conforme empresa/destina‡Ćo
;Ultima Alteracao: 13/02/2014 por Andrey Fillipe
;Motivo Alteracao: Adicionado campo observacao
;Ultima Alteracao: 12/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: InclusĆo Ajusta_Dados_Item() 
;Ultima Alteracao: 12/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes getrecord itens         
;Ultima Alteracao: 30/03/2017 por Bruno Carvalho 
;Motivo Alteracao: Ajustes p/ gravar o numero da expedi‡Ćo na cabe‡a da nota
;Ultima Alteracao: 13/06/2017 por Bruno Carvalho                          
;Motivo Alteracao: InclusĆo da variavel de controle FATUROU_OE p/ verificar se ordem de expedi‡Ćo foi faturada
;Ultima Alteracao: 31/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desconto item
;Ultima Alteracao: 26/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes mensagem processando       
;Ultima Alteracao: 19/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes item concentrador #0232
;Ultima Alteracao: 05/06/2019 por Bruno Carvalho 
;Motivo Alteracao: Adicionado processo para incluir volume no faturamento
;Ultima Alteracao: 24/09/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes tabela preco faturai=faturac  
;Ultima Alteracao: 28/07/2020 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes #0112 controle lote
;Ultima Alteracao: 31/07/2020 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes mensagem expedi‡Ćo nĆo liberada
;Ultima Alteracao: 31/07/2020 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes #0112 nĆo usar lote ainda     

;*******************************************************************************
;* Faturamento de Ordem de Expedicao              
;*******************************************************************************
Proc Expedicao()
Private OK, PED_ORC_FAT, SEQI, Atualiza, ExpedOk, cc, ccfp, ccd, Item, qtdp, qtde,NUMOE,
        UsaItemConcentrador, regExpedI, itemok

Moveto "FaturaI"
End
SEQI=[Item da Of]


OK=""
PED_ORC_FATURAR=""
PED_ORC_FAT=""

ShowDialog "Expedi‡„o" proc "OPCAO" @ 09,20 height 03 width 30
  @ 0,4 ?? "N§ Expedi‡„o:"
  Accept @ 00,19 width 9 "A6" Picture "#*#" tag "PED_ORC_FATURAR" to PED_ORC_FATURAR

  PushButton @ 02,06 Width 10 "Sim"     OK Value "Sim" Tag "Sim" to Button
  PushButton @ 02,15 Width 10 "N„o" CANCEL Value "Nao" Tag "N„o" to Button
Enddialog
If OK="N"
   Then Return
EndIf
PED_ORC_FATURAR=PED_ORC_FAT
PED_ORC_FATURAR=AlinhM(PED_ORC_FATURAR,6)

Moveto "FaturaC"
UnLockRecord
FormKey
IsLockRecord()

NUMOE = ""

{TableAdd} {ExpedC}
{TableAdd} {ExpedI}
if sys_codigo_cliente="x0112" then {TableAdd} {ExpedIL} endif

ExpedOk=False
Moveto "ExpedC"
Moveto [Numero da OE    ] 
Locate PED_ORC_FATURAR
If Retval
   Then
        If [Situacao da OE]="LIBERADO"
           Then 
                MSG="Ordem de expedi‡„o [LIBERADA]: // //"
                MSG=MSG+Completa("Ordem "+[Numero da OE]+" de "+Format("D13",[Data_Inclusao])+" - "+[Hora_Inclusao]+
                        " , Carregamento "+[Numero_Carregamento],60," ")+"//"
                MSG=MSG+Completa("Cliente "+[Codigo]+" "+[Razao Social],60," ")+"//"
                MSG=MSG+Completa("Liberado em "+Format("D13",[Data_Liberacao])+" - "+[Hora_Liberacao],60," ")+"// //"
                If ConfGeral(MSG+"Confirma faturar esta ordem ?")
                   Then ExpedOk=True
                EndIf

           else 
                MSG="Ordem de expedi‡„o [N¶O LIBERADA]: // //"
                MSG=MSG+Completa("Ordem "+[Numero da OE]+" de "+Format("D13",[Data_Inclusao])+" - "+[Hora_Inclusao]+
                        " , Carregamento "+[Numero_Carregamento],60," ")+"//"
                MSG=MSG+Completa("Cliente "+[Codigo]+" "+[Razao Social],60," ")+"// // Verificar !"
                Mensagem(MSG)
        endif   
   Else
        Mensagem("Ordem de expedi‡„o n„o encontrada "+PED_ORC_FATURAR+" !")
EndIf

UsaItemConcentrador      = False
switch
  case sys_codigo_Cliente="0232" : 
    if upper(substr(directory(),1,2))="V:"
       then UsaItemConcentrador      = true
    endif        
endswitch


If ExpedOk and UsaItemConcentrador
   then
        Echo Off

        ShowPopup " Op‡„o agrupar " CENTERED
         "~S~em Agrupar          ": " sem agrupamento "           :"SEM",
         "~I~tem Concentrador    ": " agrupar item concentrador " :"COM",
         "~C~ancelar             ": " Cancelar a Opera‡„o       " : "CANCELAR"
        EndMenu
        To MenuVar

        Echo Off
        If MenuVar="CANCELAR" or MenuVar="Esc"
           Then ExpedOk=False
        EndIf
        If MenuVar="SEM" then UsaItemConcentrador = false endif
        If MenuVar="COM" then UsaItemConcentrador = true  endif
endif

If Not ExpedOk
   Then 
        Do_It!
        Moveto "ExpedC"  ClearImage
        Moveto "ExpedI"  ClearImage
        Moveto "FaturaC"
        CoEditKey
        FormKey
        IsLockRecord()
        Return
EndIf

NUMOE = [Numero da OE]
OBS   = [Observacao]

Usando_Expedicao=True
While True
	Moveto "ExpedI"
	Moveto [Numero da OE]
	Locate [ExpedC->Numero Da OE]
	If Not Retval
	   Then NUMOE=""
            Mensagem("Ordem de Expedicao "+[ExpedC->Numero Da OE]+" sem itens !// Verificar !")
	        QuitLoop 
	   Else 
            LimpaRodape(0)
            Aguarde("Carregando itens")

	        ExpedOk=True
	        cc  =0
	        While [Numero Da OE]=[ExpedC->Numero Da OE]
	         If [Quantidade_Expedida]>0 Then
	            cc=cc+1
	         EndIf   
	         Skip
	         If EOT() Then QuitLoop EndIf
	        EndWhile
	        
	        If cc=0
	           Then NUMOE=""
                    MSG="" 
				    MSG=MSG+"N„o existe Item com Quantidade expedida para esta ordem !//"
		            MSG=MSG+"Verificar expedi‡„o !//"
				    QuitLoop
	        EndIf   
	    
	        qtde=0
	
	        Moveto "ExpedI"
	        Moveto [Numero da OE]
	        Locate [ExpedC->Numero Da OE]
	        While [Numero Da OE]=[ExpedC->Numero Da OE]
              Aguarde("Processando itens")
	      
              copytoarray regExpedI

              if regExpedI["Quantidade_expedida"]>0
                 then
                      CHAVEI=1
	            
      	            ExpedOk=True
      	            Moveto "FaturaI"
      	            While True
      	              End
      	              SEQI=SEQI+1
      	              If SEQI>900
      	                 Then Mensagem("Numero Maximo de Itens 900 permitidos !")
      	                      ExpedOk=False
      	                      QuitLoop
      	              EndIf
      	              Down
      	              [Numero da Of]=[FaturaC->Numero da Of]
      	              [Item da Of  ]=SEQI
      	              If Not IsLockRecord()
      	                 Then QuitLoop
      	                 Else Del
      	              EndIf   
      	            EndWhile
      	            If Not ExpedOk
      	               Then QuitLoop
      	            EndIf   
	    
                      itemok=true
                      If UsaItemConcentrador
                         then
        				      getrecord "\\sistemas\\estoque\\itens" "05"+substr(regExpedI["Codigo do Item"],3,8) to regitens
        				      if retval
        				         then 
                                      regExpedI["Codigo do Item"]="05"+substr(regExpedI["Codigo do Item"],3,8)
        				         else
                				      getrecord "\\sistemas\\estoque\\itens" regExpedI["Codigo do Item"] to regitens
                				      if not retval
                				         then itemok=false
                				      endif
                              endif
                         else
        				      getrecord "\\sistemas\\estoque\\itens" regExpedI["Codigo do Item"] to regitens
        				      if not retval
        				         then itemok=false
        				      endif
                      endif   
	    
				      if not itemok
				         then 
                              Mensagem("Item: "+regExpedI["Codigo do Item" ]+", nĆo cadastrado !")
                              del
				         else
                              [Codigo do Item          ]=regExpedI["Codigo do Item"      ]
                              [Quantidade              ]=regExpedI["Quantidade_Expedida" ]
                              [Codigo da Tabela        ]=[FaturaC->Codigo da Tabela]
        	
                              VSD_I_Codigo_Item=[Codigo do Item]
                              Pega_Preco("Novo")
                              
                              If Not CHECA_ESTOQUE() Or [Preco Unitario]<=0
                                 Then 
                            	      If [Preco Unitario]<=0
                                         Then MSG="Item: "+[Codigo do Item]+" - "+SubStr([Descricao do Item ],1,30)
                                              Mensagem(MSG+"//Item sem tabela de pre‡o !")
                                      EndIf
                                      Del
                             	 Else
                                      Ajusta_Dados_Item()
                                      Registro_Item("Ler")
                                      CalcularPrecoTotal_Item()
                                      Registro_Item("Gravar")
                                      
                                      qtde         =qtde+regExpedI["Quantidade_Expedida"]
                                    
                                      ESTOQUE()
                              EndIf
                              
                              
                              if sys_codigo_cliente="x0112"
                                 then
                                      moveto "ExpediL"
                                      Moveto [Numero da OE]
                                      Locate [ExpedC->Numero Da OE]
                                      If Retval
                                         Then While [Numero Da OE]=[ExpedC->Numero Da OE]
                                 
                                                if [Codigo do Item]=[FaturaI->Codigo do Item]
                                                   then
                                                        itemloteok=false
                                                        moveto "FaturaIL"
                                                        moveto [Numero da OF]
                                                        locate [FaturaI->Numero da OF],[FaturaI->Item da OF]
                                                        if retval
                                                           then While [Numero da OF ]=[FaturaI->Numero da OF  ] and
                                                                      [Item da OF   ]=[FaturaI->Item da OF    ]
                                                   
                            
                                                                  if [Codigo do Item]=[ExpedIL->Codigo do Item] and
                                                                     [LoteNumero    ]=[ExpedIL->LoteNumero    ]     
                                                                     then itemloteok=true
                                                                          [LoteQuantidade]=[LoteQuantidade]+[ExpedIL->LoteQuantidade]
                                                                          unlockrecord
                                                                          quitloop
                                                                  endif   
                            
                                                                  skip
                                                                  if eot() then quitloop endif
                                                                endwhile                        
                                                        endif
                                                        if not itemloteok
                                                           then
                                                                moveto "FaturaIL"
                                                                end down
                                                                [Numero da OF        ]=[FaturaI->Numero da OF        ]
                                                                [Item da OF          ]=[FaturaI->Item da OF          ]
                                                                [Codigo do Item      ]=[FaturaI->Codigo do Item      ]
                                                                [LoteNumero          ]=[ExpedIL->LoteNumero          ]
                                                                [LoteDataFabricacao  ]=[ExpedIL->LoteDataFabricacao  ]
                                                                [LoteDataValidade    ]=[ExpedIL->LoteDataValidade    ]
                                                                [LoteQuantidade      ]=[ExpedIL->LoteQuantidade      ]
                                                                [Numero do Lancamento]=[ExpedIL->Numero do Lancamento]
                                                                unlockrecord
                                                        endif
                            
                                                        moveto "ExpediL"   
                                                endif
                            
                                                skip
                                                if eot() then quitloop endif
                                              endwhile
                                      endif
                              endif   
                              
                              SaveTables
	            endif
	            
              EndIf
	         
			  Moveto "ExpedI"
	          Skip
	          If EOT() Then QuitLoop EndIf
	        EndWhile
	    
	        If ([FaturaC->Tipo Movimento Estoque]="S" And qtde>0) or 
               [FaturaC->Tipo Movimento Estoque]="E" 
	           Then FATUROU_OE=True
                    Moveto "ExpedC"
	                [Situacao da OE]="FATURADO"
	                [Data_Liberacao]=Today()
	                [Hora_Liberacao]=Time()
	                UnLockRecord
	        EndIf
	EndIf
	QuitLoop
EndWhile        

Moveto "FaturaC"
OBS1 = [Observacao na Nota Fiscal]
Switch
   Case OBS<>"" And OBS1="" :
        [Observacao na Nota Fiscal] = "OBS. EXPEDICAO: "+OBS
   Case OBS<>"" And OBS1<>"":
        [Observacao na Nota Fiscal] = OBS1+"\n"+"OBS. EXPEDICAO: "+OBS
EndSwitch                  
Do_It!

Moveto "ExpedC" ClearImage
Moveto "ExpedI" ClearImage
if sys_codigo_cliente="x0112" then Moveto "ExpedIL" ClearImage endif
Moveto "FaturaC"
CoEditKey
FormKey
IsLockRecord()

Usando_Expedicao=False

;---- Adicionando Numero da Expedi‡Ćo na Cabe‡a da Nota -------------------------    
If NUMOE<>"" And FATUROU_OE
   Then ANT_TAB = Table()
        ANT_FIE = Field()
        
        Moveto "FaturaC"
        [Numero da Expedicao] = NUMOE
        [Origem da Expedicao] = "ES"
        
        GetRecord "ExpedC" NUMOE To REG_EXPEDC
        If RetVal 
           Then [Marca dos Volumes      ] = REG_EXPEDC["Marca dos Volumes"      ]
                [Numero Ordem de Volumes] = REG_EXPEDC["Numero Ordem de Volumes"]
                [Numero de Volumes      ] = REG_EXPEDC["Numero de Volumes"      ]
                [Especie de Volumes     ] = REG_EXPEDC["Especie de Volumes"     ]
                [Peso Bruto             ] = REG_EXPEDC["Peso Bruto"             ]
                [Peso Liquido           ] = REG_EXPEDC["Peso Liquido"           ]      
        EndIf
        Release Vars REG_EXPEDC
        
        Moveto ANT_TAB
        Moveto Field ANT_FIE
        Release Vars ANT_TAB,ANT_FIE
EndIf
;---------------------------------------------------------------------------------

LimpaRodape(0)
EndProc   ;  (Expedicao)

;**** Rotina Principal *****
FATUROU_OE=False
Expedicao()
Release Procs Expedicao
