  ;** 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                          

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

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

{TableAdd} {ExpedC}
{TableAdd} {ExpedI}

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 "ExpedI"  ClearImage
        Moveto "FaturaC"
        CoEditKey
        FormKey
        IsLockRecord()
        Return
EndIf

Usando_Expedicao=True
While True
	Moveto "ExpedI"
	Moveto [Numero da OE]
	Locate [ExpedC->Numero Da OE]
	If Not Retval
	   Then Mensagem("Ordem de Expedicao "+[ExpedC->Numero Da OE]+" sem itens !// Verificar !")
	        QuitLoop 
	   Else 
	        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 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]
	        
	         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   
	    
			        [Codigo do Item          ]=[ExpedI->Codigo do Item      ]
	            [Quantidade              ]=[ExpedI->Quantidade_Expedida ]
	
	            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

                      If [Tributacao de ICMS]<>"D" And Not IsBlank([Tipo Tributacao])
                        Then Switch
                              Case [Tributacao de Icms]="O": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"90"                
                              Case [Tributacao de Icms]="I": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"40"                                
                              Case [Tributacao de Icms]="N": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"41"                                
                      			 EndSwitch
                      EndIf
                      
                      ;* Seta Variaveis PegaCFOP
                      Checa_CFOP      =[FaturaC->Tipo Movimento Estoque]
                      Switch
                        Case SYS_CODIGO_CLIENTE="0000": CFO_C=""
                        OtherWise                     : CFO_C=[FaturaC->CFO]
                      EndSwitch
                      CFOP_TPITEM     =[Tipo do Item              ]
                      CFOP_TRIBICMS   =[Tributacao de ICMS        ]
                      CFOP_TPTRIB     =[Tipo Tributacao           ]
                      CFOP_EMPRESA    =[FaturaC->Codigo da Empresa]
                      CFOP_ATIVEMPRESA=ATIVEMPR
              
                      Play "\\Sistemas\\Exporta\\PegaCFOP"
              
                      Switch
                        Case SYS_CODIGO_CLIENTE="0000": 
                          [CFO            ]=""
                          [Tipo Tributacao]=""
                        OtherWise                     : 
                          [CFO            ]=CFO_C
                          [Tipo Tributacao]=CFOP_TPTRIB
                      EndSwitch
              
                      If Search("VENDA",[FaturaC->Descricao da Destinacao])=0 And [FaturaC->Tipo Movimento Estoque]<>"S"
                        Then [PIS_CST        ]  ="99"
                             [PIS_ALIQUOTA   ]=BlankNum() 
                             [COFINS_CST     ]  ="99"
                             [COFINS_ALIQUOTA]=BlankNum() 
                      EndIf   
              
                      If [FaturaC->Tipo Movimento Estoque]="E"                     And
                         (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
                         Search("DEVOL",[FaturaC->Descricao da Destinacao])>0      And
                         SYS_CLIENTE_CONFEC<>""
                         Then [CSOSN                  ]="400"
                              [Tipo Tributacao        ]=SubStr([Tipo Tributacao],1,1)+"90"
                              [Tributacao de ICMS     ]="O"
                      EndIf
              
                      If [FaturaC->Tipo Movimento Estoque]="S"                     And
                         (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
                         (Search("SIMPLES",[FaturaC->Descricao da Destinacao])>0    Or
                          Search("OUTRAS" ,[FaturaC->Descricao da Destinacao])>0)  And
                         SYS_CLIENTE_CONFEC<>""
                         Then [CSOSN                  ]="400"
                              [Tipo Tributacao        ]=SubStr([Tipo Tributacao],1,1)+"90"
                              [Tributacao de ICMS     ]="O"
                      EndIf
              
                      If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                         Then If ([CSOSN]="101" Or [CSOSN]="201") And [ICMS_CREDSN_Aliquota]<=0
                                 Then [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                              EndIf
                              If ([CSOSN]="201" Or [CSOSN]="202" Or [CSOSN]="203") And [ICMS_ST_Aliquota]<=0
                                 Then [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                              EndIf
                         Else    
                              TribCST=SubStr([Tipo Tributacao],2,2)
                              If (TribCST="10" Or TribCST="30" Or TribCST="70") And [ICMS_ST_Aliquota]<=0
                                 Then [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                              EndIf
                      EndIf   
                              
                      If SYS_CODIGO_CLIENTE="0079"             And
                         [Faturac->Codigo da Empresa]="0001"   And
                         [FaturaC->Tipo Movimento Estoque]="S"
                         Then
                             [Tributacao de ICMS     ]="O"
                             [Aliquota de ICMS       ]=BlankNum()
                             [Tipo Tributacao        ]="090"
                             [CSOSN                  ]="101"
              
                             If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                Then If [FaturaC->TIPO PESSOA]="FISICA" Or Not ALIQUOTA_CREDITO_ICMS_NOSN>0 
                                        Then Switch
                                               Case [CSOSN]="101": [CSOSN]="102" 
                                               Case [CSOSN]="201": [CSOSN]="202" 
                                             EndSwitch
                                     EndIf
                             EndIf
              
                             If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
                                (Search("MOSTR",[FaturaC->Descricao da Destinacao])>0     Or
                                 Search("DEVOL",[FaturaC->Descricao da Destinacao])>0     Or
                                 Search("BRIND",[FaturaC->Descricao da Destinacao])>0)    And
                                SYS_CLIENTE_CONFEC<>""
                                Then [CSOSN]="400"
                             EndIf
              
                             [PIS_CST                ]="99"
                             [PIS_ALIQUOTA           ]=BlankNum()
                             [COFINS_CST             ]="99"
                             [COFINS_ALIQUOTA        ]=BlankNum()
                       EndIf
              
                       If SYS_CODIGO_CLIENTE="0003" And CFO_C="6109"
                        Then [PIS_CST                ]="08"
                             [PIS_ALIQUOTA           ]=BlankNum()
                             [COFINS_CST             ]="08"
                             [COFINS_ALIQUOTA        ]=BlankNum()
                      EndIf               
              
                      [Preco Total             ]=Round([Quantidade]*([Preco Unitario]-[Valor Desconto Unitario]),2)
                      
                      If PARAM_COMIS_MARCA="S"
                        Then If Search("VEND",[FaturaC->Descricao da Destinacao])>0 And
                                ([Tipo do Item]="P" Or [Tipo do Item]="T")
                                Then If [Quantidade]>0 and [Preco Unitario]>0
                                         Then [Preco Total]=Round([Quantidade]*([Preco Unitario]),2)
                                         Else If [Preco Unitario]>0
                                                 Then [Preco Total]=Round([Preco Unitario],2)
                                              EndIf
                                     EndIf
                             EndIf
                      EndIf
                      
                      If [Tributacao de ICMS]<>"D"
                         Then If Not IsBlank([Tributacao de ICMS      ])
                                  Then [Aliquota Reduzida BCICMS]=BlankNum()
                                       [Aliquota de ICMS        ]=BlankNum()
                                       [Valor do ICMS           ]=BlankNum()
                               EndIf
                      EndIf
                      
                      If [Aliquota Reduzida BCICMS]>0 And
                         [Aliquota de ICMS        ]>0
                         Then [Valor do ICMS]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS])/100,2)
                         Else [Valor do ICMS]=Round(([Preco Total]*[Aliquota de ICMS])/100,2)
                      EndIf
                      
                      If [Aliquota Reduzida BCIPI ]>0 And
                         [Aliquota de IPI         ]>0
                         Then [Valor do IPI ]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCIPI ])/100))*[Aliquota de IPI])/100,2)
                         Else [Valor do IPI ]=Round(([Preco Total]*[Aliquota de IPI ])/100,2)
                      EndIf
                      
                      [Valor do ISSQN ]=Round(([Preco Total]*[Aliquota de ISSQN ])/100,2)
                      [Valor do IR    ]=Round(([Preco Total]*[Aliquota de IR    ])/100,2)
                      
				              qtde          =qtde+[ExpedI->Quantidade_Expedida]
				            
				              ESTOQUE()
	            EndIf
	          
	            SaveTables
	          
	         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 Moveto "ExpedC"
	                [Situacao da OE]="FATURADO"
	                [Data_Liberacao]=Today()
	                [Hora_Liberacao]=Time()
	                UnLockRecord
	        EndIf
	EndIf
	QuitLoop
EndWhile
Do_It!
Moveto "ExpedC" ClearImage
Moveto "ExpedI" ClearImage
Moveto "FaturaC"
CoEditKey
FormKey
IsLockRecord()
Usando_Expedicao=False

EndProc   ;  (Fatura_Pedido_Orcamento)



;**** Rotina Principal *****
Expedicao()
Release Procs Expedicao
