;** FT_EXPDR *******************************************************************
;*  Rotina de faturamento de ordem de expedicao COM REFERENCIA                 *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 15/07/2015 por Kamila Gomes            
;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       
;Ultima Alteracao: 05/06/2019 por Bruno Carvalho 
;Motivo Alteracao: Adicionado processo para incluir volume no faturamento
;Ultima Alteracao: 27/08/2019 por Bruno Carvalho 
;Motivo Alteracao: Adicionado VARIACOES no campo [Informacoes_Adicionais]

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

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")

	        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 "ExpedIQ"
	        Moveto [Numero da OE]
	        Locate [ExpedC->Numero Da OE]
	        While [Numero Da OE]=[ExpedC->Numero Da OE]
           Aguarde("Processando itens")
        
	         If [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   

				      getrecord "\\sistemas\\estoque\\itens" [ExpedIQ->Codigo do Item] to regitens
				      if not retval
				         then 
                      Mensagem("Item: "+[ExpedIQ->Codigo do Item ]+", nĆo cadastrado !")
                      del
				         else
        			        [Codigo do Item          ]=[ExpedIQ->Codigo do Item         ]
        	            [Quantidade              ]=[ExpedIQ->Quantidade_Expedida    ]
        	            [Codigo da Cor_Tecido    ]=[ExpedIQ->Codigo da Cor_Tecido   ]
                      [Descricao da Cor_Tecido ]=[ExpedIQ->Descricao da Cor_Tecido]
                      
                      If [Informacoes_Adicionais]<>""
                         Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " " + "V["+[ExpedIQ->Variacoes]+"]" 
                         Else [Informacoes_Adicionais] = "V["+[ExpedIQ->Variacoes]+"]"
                      EndIf
        	
        	            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+[ExpedIQ->Quantidade_Expedida]
        				            
        				              ESTOQUE()
        	            EndIf
        	          
        	            SaveTables
				      endif
	         EndIf
	         
					 Moveto "ExpedIQ"
	         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 "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] = "ER"
        
        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
