  ;** 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: 09/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes qtde=qtde+QUANTI[Wii] [Situacao da OE]="FATURADO"
;Ultima Alteracao: 09/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes erro mensagem
;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: 17/06/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes getrecord iten_Com
;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       

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

Array CODIGO[300]
Array QUANTI[300]

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} {ExpedIQ}

ExpedOk=False
Moveto "ExpedC"
Moveto [Numero da OE    ] 
Locate PED_ORC_FATURAR
If Retval
   Then If [FaturaC->Tipo Movimento Estoque]="E"
				   Then ExpedOk=True
				   Else
				        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
								EndIf	
                			        
				EndIf	
EndIf

If Not ExpedOk
   Then 
        Mensagem("Ordem de expedi‡„o [LIBERADA] n„o encontrada "+PED_ORC_FATURAR+" !")
        Do_It!
        Moveto "ExpedC"  ClearImage
        Moveto "ExpedIQ"  ClearImage
        Moveto "FaturaC"
        CoEditKey
        FormKey
        IsLockRecord()
        Return
EndIf

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

Usando_Expedicao=True
While True
	Moveto "ExpedIQ"
	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")

	        For Wii From 1 to 300
            CODIGO[Wii]=""
            QUANTI[Wii]=BlankNum()
          EndFor

	        ExpedOk=True
	        cc  =0
	        While [Numero Da OE]=[ExpedC->Numero Da OE]
           Moveto [Codigo do Item]

           If [Quantidade_Expedida]>0 
              Then
       	           cc=cc+1
               
                   For Wii From 1 to 300
                       If CODIGO[Wii]=[Codigo do Item]
                          Then QUANTI[Wii]=QUANTI[Wii]+[Quantidade_Expedida]
                               QuitLoop
                          Else If CODIGO[Wii]=""
                                  Then CODIGO[Wii]=[Codigo do Item]
                                       QUANTI[Wii]=[Quantidade_Expedida]
                                       QuitLoop
                               Endif
                       Endif
                   Endfor
           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

          For Wii From 1 to 900
            Aguarde("Processando itens")

            If IsBlank(CODIGO[Wii])
               Then QuitLoop
            Endif
            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   
          
			      getrecord "\\sistemas\\estoque\\itens" CODIGO[Wii] to regitens
			      if not retval
			         then 
                    Mensagem("Item: "+CODIGO[Wii]+", nĆo cadastrado !")
                    del
			         else
                    [Codigo do Item          ]=CODIGO[Wii]
                    [Quantidade              ]=QUANTI[Wii]
                  
                    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
                            GetRecord "\\Sistemas\\Estoque\\Iten_Com" [ExpedIQ->Codigo do Item] To REG_ITEMCOMP
                               If Not RetVal
                                  Then Mensagem("Item "+[ExpedIQ->Codigo do Item]+" n„o localizado na tabela de complementos!")
                                       QuitLoop
                               EndIf
                  		 
                  		      Ajusta_Dados_Item()
                  		      Registro_Item("Ler")
                            CalcularPrecoTotal_Item()
                            Registro_Item("Gravar")
                            
                            qtde         =qtde+QUANTI[Wii]
                          
                            ESTOQUE()
                    EndIf
                  
                    SaveTables
            endif
          EndFor
	    
	        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 "ExpedIQ" ClearImage
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] = "EC"
        
        Moveto ANT_TAB
        Moveto Field ANT_FIE
        Release Vars ANT_TAB,ANT_FIE
EndIf
;---------------------------------------------------------------------------------

LimpaRodape(0)
EndProc   ;  (Expedicao)

FATUROU_OE=False
Expedicao()
Release Procs Expedicao
