;** RestauPD********************************************************************
;*  Restaura‡Æo de Pedidos                                                     *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 25/06/2002 por Anivel Augusto Rodrigues
;Ultima Alteracao: 15/07/2004 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Codigo Cor_Tecido, Inclusao Clientes e Itens
;Ultima Alteracao: 05/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo importar Itens clientes 0079,0171,0185
;Ultima Alteracao: 21/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes UF_ALIQUOTA_ICMS                      
;Ultima Alteracao: 16/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Agrupa
;Ultima Alteracao: 31/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Clientes 0003,0200
;Ultima Alteracao: 25/09/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes LER DESTINACAO
;Ultima Alteracao: 25/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes AgrupaB()
;Ultima Alteracao: 02/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calc_Venctos()
;Ultima Alteracao: 15/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Ajustes_Pedidos()Saindo do Sistema
;Ultima Alteracao: 29/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Ajustes_Pedidos()Saindo do Sistema +Pacote
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes opcoes reducao BCICMS               
;Ultima Alteracao: 13/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo calcular vencimentos, variaveis privadas
;Ultima Alteracao: 15/09/2010 por Karina Andrade
;Motivo Alteracao: Ajustes codigo cliente confec‡Æo
;Ultima Alteracao: 07/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ReducÆo BCICMS apenas se houver desconto na NF
;Ultima Alteracao: 15/12/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado nova op‡Æo para altera‡Æo da situa‡Æo do pedido
;Ultima Alteracao: 16/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Layout
;Ultima Alteracao: 30/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia Nova Codifica‡Æo
;Ultima Alteracao: 05/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia nÆo pegar preco
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes  
;Ultima Alteracao: 13/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes UNIBRAS  
;Ultima Alteracao: 27/06/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo Arj para c:\Arj
;Ultima Alteracao: 04/11/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado agrupamento de itens por pre‡o unit rio #0301#
;Ultima Alteracao: 01/12/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo de "Arj -> Varj"
;Ultima Alteracao: 02/12/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustado o valor dos vencimentos para empresa "0301"
;Ultima Alteracao: 08/12/2011 por Karina Andrade
;Motivo Alteracao: Nova nomeclatura pacote importado
;Ultima Alteracao: 21/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN quando Destinacao for de Mostruario
;Ultima Alteracao: 22/12/2011 por Karina Andrade
;Motivo Alteracao: Ajustes checa importa‡Æo e Ajusta_Pedidos() 
;Ultima Alteracao: 03/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes nome pacote importado
;Ultima Alteracao: 23/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATIVEMPR para pega_CFOP
;Ultima Alteracao: 07/05/2012 por Bruno Carvalho
;Motivo Alteracao: Add Sleep na rotina onde ‚ processado o ARJ                            
;Ultima Alteracao: 26/06/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ empresa 0222, onde nÆo vai importar os vencimentos dos pedidos                            
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando for parcelas fixas "PARAM_DATAS_VENCTOS" 
;Ultima Alteracao: 03/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Layout                   
;Ultima Alteracao: 07/03/2013 por Karina Andrade
;Motivo Alteracao: Ajustes nÆo PEGA_PRECO() para SYS_CODIGO_CLIENTE="0171"
;Ultima Alteracao: 28/03/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes nÆo PEGA_PRECO() #0171#
;Ultima Alteracao: 02/07/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes AGRUPAB() -> Alterado variavel "i" para "wi"  
;Ultima Alteracao: 27/11/2013 por Bruno Carvalho
;Motivo Alteracao: Se CheckTG_OPCAO[2], [Quantidade Faturada] p/ confec‡Æo est  sendo importado  
;Ultima Alteracao: 10/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Biblioteca Bib_Ven                  
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() getrecord                    
;Ultima Alteracao: 23/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao novas tabelas regras para produtos
;Ultima Alteracao: 29/09/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0388# -> PegaCodigoRaiz()
;Ultima Alteracao: 19/10/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Iten_Tec"
;Ultima Alteracao: 03/12/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0390# -> PegaCodigoRaiz()
;Ultima Alteracao: 06/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog  
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()
;Ultima Alteracao: 07/04/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0396#
;Ultima Alteracao: 23/05/2017 por Rafael Matos
;Motivo Alteracao: Adicionado "Iten_Bar" 
;Ultima Alteracao: 04/07/2017 por Rafael Matos
;Motivo Alteracao: Substituido Busca_Lookup por GetRecord                  
;Ultima Alteracao: 27/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar condi‡Æo pagamento por item
;Ultima Alteracao: 01/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes preco unitario 0274
;Ultima Alteracao: 08/08/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado Gera_Log()                     
;Ultima Alteracao: 05/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo importar obs "0222"
;Ultima Alteracao: 02/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes SIRI nÆo agrupar Itens                     
;Ultima Alteracao: 14/03/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Iten_eco"
;Ultima Alteracao: 19/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Pega_Preco() pesquisa item e depois codigoraiz

;*******************************************************************************
;* Rotina Excluir Pedidos Existentes                                           *
;*******************************************************************************
Proc Excluir_Pedidos()

If Not IsTable(VSDGDRIVE+"\\PedidoC") Or
   Not IsTable(VSDGDRIVE+"\\PedidoI") Or
   Not IsTable(VSDGDRIVE+"\\PedidoV")
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Pedidos !")
        Return
EndIf

ClearAll

AGUARDE("Aguarde, excluindo Pedidos existentes")

{Ask} TypeIn VSDGDRIVE+"\\PedidoC" Enter
Moveto [Numero do Pedido   ] Check
Moveto [Codigo da Empresa  ] TypeIn "~VSDGEMPRESA.."
Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Do_It!
ClearAll

Array Arquivo[3]
Arquivo[3]="PedidoC"
Arquivo[2]="PedidoI"
Arquivo[1]="PedidoV"

Cont     = 1
For Cont From 1 To 3
    AGUARDE("Aguarde, Excluindo "+Arquivo[Cont])
    If IsTable(Arquivo[Cont])
       Then {Ask} {Answer}
            Moveto [Numero do Pedido   ] Example "ndoc"
            {Ask} TypeIn Arquivo[Cont] Enter TypeIn "Fast Delete"
            Moveto [Numero do Pedido   ] Example "ndoc"
            Do_It!
            ClearAll
    EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina Excluir Carregamentos Existentes                                     *
;*******************************************************************************
Proc Excluir_Carregamentos()

If Not IsTable(VSDGDRIVE+"\\AccarrgC") Or
   Not IsTable(VSDGDRIVE+"\\AccarrgI") Or
   Not IsTable(VSDGDRIVE+"\\AccarrgV")
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Carregamentos !")
        Return
EndIf

ClearAll

AGUARDE("Aguarde, Excluindo Carregamentos")

{Ask} TypeIn VSDGDRIVE+"\\AccarrgC" Enter
Moveto [Numero_Carregamento] Check
Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Do_It!
ClearAll

Arquivo[3]="AccarrgC"
Arquivo[2]="AccarrgI"
Arquivo[1]="AccarrgV"

Cont     = 1
For Cont From 1 To 3
    AGUARDE("Aguarde, Excluindo "+Arquivo[Cont])
    If IsTable(Arquivo[Cont])
       Then {Ask} {Answer}
            Moveto [Numero_Carregamento] Example "ndoc"
            {Ask} TypeIn Arquivo[Cont] Enter TypeIn "Fast Delete"
            Moveto [Numero_Carregamento] Example "ndoc"
            Do_It!
            ClearAll
    EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina Importa Carregamentos                                                *
;*******************************************************************************
Proc Carregamentos()

If Not IsTable(VSDGDRIVE+"\\AccarrgC") Or
   Not IsTable(VSDGDRIVE+"\\AccarrgI") Or
   Not IsTable(VSDGDRIVE+"\\AccarrgV")
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Carregamentos !")
        Return
EndIf

ClearAll

AGUARDE("Aguarde, Restaurando Carregamentos")

Array Arquivo[3]
Arquivo[1]="AccarrgC"
Arquivo[2]="AccarrgI"
Arquivo[3]="AccarrgV"

Cont     = 1

SetDir "\\Sistemas\\Vendas"
For Cont From 1 To 3
    AGUARDE("Aguarde, Restaurando "+Arquivo[Cont])
    If IsTable(Arquivo[Cont])
       Then If Arquivo[Cont]<>"AccarrgC"
               Then {Ask} TypeIn VSDGDRIVE+"\\AccarrgC" Enter
                  ;;Moveto [Codigo da Empresa  ] Example "cemp" TypeIn ", ~VSDGEMPRESA.."
                    Moveto [Numero_Carregamento] Example "ndoc"
                    Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                    {Ask} TypeIn VSDGDRIVE +"\\"+Arquivo[Cont] Enter Check
                    Moveto [Numero_Carregamento] Example "ndoc"
               Else {Ask} TypeIn VSDGDRIVE+"\\AccarrgC" Enter Check
                  ;;Moveto [Codigo da Empresa  ] TypeIn "~VSDGEMPRESA.."
                    Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
            Endif
            Do_It!
            ClearAll
            If Not IsEmpty("Answer")
               Then Add "Answer" Arquivo[Cont]
                    ClearAll
            EndIf
            If IsTable("keyViol")
               Then Delete("KeyViol")
            EndIf
            IMPCAR=True
    EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina Importa Clientes                                                     *
;*******************************************************************************
Proc Clientes()
ClearAll

AGUARDE("Aguarde, Restaurando Destinat")
If IsTable(VSDGDRIVE+"\\Destinat")
   Then {Ask} TypeIn VSDGDRIVE+"\\Destinat" Enter Check
        Moveto [Codigo] Example "cod"
     ;;;Moveto [Data_Cadastro] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        {Ask} TypeIn VSDGDRIVE+"\\Pedidoc" Enter
        Moveto [Codigo] Example "cod"
        Do_It!
        ClearAll
        If Not ISEmpty("Answer")
           Then Add "Answer" "\\Sistemas\\Cadastro\\Destinat"
                ClearAll
        EndIf
        If IsTable("keyViol")
           Then Delete("KeyViol")
        EndIf
        IMPCLI=True
EndIf
ClearAll

If SYS_CODIGO_CLIENTE="0126"
  Then {Ask} {\\Sistemas\\Cadastro\\Destinat} TypeIn "Fast"
       Moveto [Tipo                   ] TypeIn "C"
       Moveto [Codigo do Representante] TypeIn "Changeto 0001"
       Moveto [Nome Fantasia Represent] TypeIn "Changeto UNIBRAS"
       Do_It!
       ClearAll
EndIf

EndProc

;*******************************************************************************
;* Rotina Importa Itens                                                        *
;*******************************************************************************
Proc Itens()
ClearAll      

switch
  case sys_Codigo_Cliente="0227" : IMPITE=False

  case SYS_CLIENTE_CONFEC<>""    : IMPITE=True
                                   Return
endswitch

AGUARDE("Aguarde, Restaurando Itens")
If IsTable(VSDGDRIVE+"\\Itens")
   Then 
        {Ask} TypeIn VSDGDRIVE+"\\Itens" Enter Check
        Moveto [Codigo do Item] Example "ite"
        {Ask} TypeIn VSDGDRIVE+"\\PedidoI" Enter
        Moveto [Codigo do Item] Example "ite"
        Do_It!
        ClearAll
        
        If Not ISEmpty("Answer")
           Then Add "Answer" "\\Sistemas\\Estoque\\Itens"
                ClearAll
        EndIf
        If IsTable("keyViol")
           Then Delete("KeyViol")
        EndIf
        
        
        ;---- Complementos dos Itens -------------------------------------------
        {Ask} TypeIn VSDGDRIVE+"\\Iten_com" Enter Check
        Moveto [Codigo do Item] Example "ite"
        {Ask} TypeIn VSDGDRIVE+"\\PedidoI" Enter
        Moveto [Codigo do Item] Example "ite"
        Do_It!
        ClearAll
        
        If Not ISEmpty("Answer")
           Then Add "Answer" "\\Sistemas\\Estoque\\Iten_com"
                ClearAll
        EndIf
        If IsTable("keyViol")
           Then Delete("KeyViol")
        EndIf
        
        ;---- Informa‡äes de Tecidos -------------------------------------------
        {Ask} TypeIn VSDGDRIVE+"\\Iten_tec" Enter Check
        Moveto [Codigo do Item] Example "ite"
        {Ask} TypeIn VSDGDRIVE+"\\PedidoI" Enter
        Moveto [Codigo do Item] Example "ite"
        Do_It!
        ClearAll
        
        If Not ISEmpty("Answer")
           Then Add "Answer" "\\Sistemas\\Estoque\\Iten_tec"
                ClearAll
        EndIf
        If IsTable("keyViol")
           Then Delete("KeyViol")
        EndIf
        
        ;---- Informa‡äes de Tecidos -------------------------------------------
        {Ask} TypeIn VSDGDRIVE+"\\Iten_eco" Enter Check
        Moveto [Codigo do Item] Example "ite"
        {Ask} TypeIn VSDGDRIVE+"\\PedidoI" Enter
        Moveto [Codigo do Item] Example "ite"
        Do_It!
        ClearAll
        
        If Not ISEmpty("Answer")
           Then Add "Answer" "\\Sistemas\\Estoque\\Iten_eco"
                ClearAll
        EndIf
        If IsTable("keyViol")
           Then Delete("KeyViol")
        EndIf
                
        ;---- Informa‡äes de C¢digo de Barras ----------------------------------
        {Ask} TypeIn VSDGDRIVE+"\\Iten_bar" Enter Check
        Moveto [Codigo do Item] Example "ite"
        {Ask} TypeIn VSDGDRIVE+"\\PedidoI" Enter
        Moveto [Codigo do Item] Example "ite"
        Do_It!
        ClearAll
        
        If Not ISEmpty("Answer")
           Then Add "Answer" "\\Sistemas\\Estoque\\Iten_bar"
                ClearAll
        EndIf
        If IsTable("keyViol")
           Then Delete("KeyViol")
        EndIf        
        
        IMPITE=True
EndIf
ClearAll
EndProc

;*******************************************************************************
;* Rotina Importa Pedidos                                                      *
;*******************************************************************************
Proc Pedidos()

If Not IsTable(VSDGDRIVE+"\\PedidoC") Or
   Not IsTable(VSDGDRIVE+"\\PedidoI") Or
   Not IsTable(VSDGDRIVE+"\\PedidoV")
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Pedidos !")
        Return False
EndIf

ClearAll

AGUARDE("Aguarde, Restaurando Pedidos")
Array Arquivo[3]
Arquivo[1]="PedidoC"
Arquivo[2]="PedidoI"
Arquivo[3]="PedidoV"

Cont     = 1

SetDir "\\Sistemas\\Vendas"
For Cont From 1 To 3
    If Cont=3 And SYS_CODIGO_CLIENTE="0222" ;NÆo vai importar os vencimentos
       Then Loop
    EndIf   
    AGUARDE("Aguarde, Restaurando "+Arquivo[Cont])
    If IsTable(Arquivo[Cont])
       Then If Arquivo[Cont]<>"PedidoC"
               Then {Ask} TypeIn Tabela Enter
                    Moveto [Numero do Pedido   ] Example "ndoc"
                    {Ask} TypeIn VSDGDRIVE +"\\"+Arquivo[Cont] Enter Check
                    Moveto [Numero do Pedido   ] Example "ndoc"
				            Do_It!
				            ClearAll
               Else {Ask} TypeIn VSDGDRIVE+"\\PedidoC" Enter Check
                    Moveto [Codigo da Empresa  ] TypeIn "~VSDGEMPRESA.."
                    Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
				            Do_It!
				            ClearAll
                    If IsEmpty("Answer")
                       Then Mensagem("N„o existem pedidos conforme sele‡„o !")
											      Return False 
										EndIf	     

				            Tabela=Cria_Temp(PrivDir())
										Rename "Answer" Tabela
				            
                    {Ask} {PedidoC} Enter
                    Moveto [Numero do Pedido   ] Example "ndoc"
                    {Ask} TypeIn Tabela Enter TypeIn "Fast Delete"
                    Moveto [Numero do Pedido   ] Example "ndoc"
				            Do_It!
				            ClearAll
                    If IsEmpty(Tabela)
                       Then Mensagem("J  existem pedidos no sistema conforme sele‡„o !//S¢ incluindo pedidos novos conforme sele‡„o !")
											      Return False 
										EndIf	     

                    {Ask} TypeIn Tabela Enter Check
				            Do_It!
				            ClearAll
				            
            Endif
            If Not IsEmpty("Answer")
               Then                 
                    Switch
                      Case Arquivo[Cont]="PedidoC":
                           {Ask} {Answer} TypeIn "Fast"
                           If Not CheckTG_OPCAO[2]
                                  Then Moveto [Situacao do Pedido] TypeIn "Changeto ABERTO" 
                           EndIf
                           Moveto [Numero_Controle_Dia      ] TypeIn "Changeto Blank"
                           Moveto [Numero Nota Gerada_Ultima] TypeIn "Changeto Blank"
                           Do_It!
                           ClearAll

                           If SYS_CODIGO_CLIENTE="0126"
                              Then {Ask} {Answer} TypeIn "Fast"
                                   Moveto [Codigo do Representante] TypeIn "Changeto 0001"
                                   Moveto [Nome Fantasia Represent] TypeIn "Changeto UNIBRAS"
                                   Do_It!
                                   ClearAll
                           EndIf

                      Case Arquivo[Cont]="PedidoI":
                           {Ask} {Answer} TypeIn "Fast"
                           If Not CheckTG_OPCAO[2]
                                  Then Moveto [Quantidade Faturada] TypeIn "Changeto Blank"
                           EndIf
                           Do_It!
                           ClearAll

                           If SYS_CODIGO_CLIENTE="0117"
                              Then {Ask} {Answer} TypeIn "Fast Delete"
                                   Moveto [Codigo da Cor_Tecido] TypeIn "0000"
                                   Do_It!
                                   ClearAll
                           EndIf
                    EndSwitch

                    Add "Answer" Arquivo[Cont]
                    ClearAll
            EndIf
            If IsTable("keyViol")
               Then Delete("KeyViol")
            EndIf

    EndIf
EndFor

If SYS_CODIGO_CLIENTE="0126"
  Then {Ask} {\\Sistemas\\Vendas\\PedidoC} TypeIn "Fast"
       Moveto [Codigo do Representante] TypeIn "Changeto 0001"
       Moveto [Nome Fantasia Represent] TypeIn "Changeto UNIBRAS"
       Do_It!
       ClearAll
EndIf
IMPPED=True
Return True
EndProc

;*******************************************************************************
;* Rotina ajusta dados pedidos                                                 *
;*******************************************************************************
Proc Ajusta_Pedidos()
Private cc

switch
  case sys_Codigo_Cliente="0227" : Return
  case SYS_CLIENTE_CONFEC=""     : Return
endswitch

IMPPED=False

If Not IsTable(VSDGDRIVE+"\\PedidoC") Or
   Not IsTable(VSDGDRIVE+"\\PedidoI") Or
   Not IsTable(VSDGDRIVE+"\\PedidoV")
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Pedidos !")
        Return
EndIf

AGUARDE("Aguarde, Ajustando Dados ")
{Ask} TypeIn Tabela Enter 
Moveto [Numero do Pedido   ] Check 
Do_It!
ClearAll
If IsEmpty("Answer")
   Then Return
EndIf   

NR = NRecords("Answer")
View "P_Pedido"
View "PedidoI"
View "PedidoV"
View "PedidoC"
View "TbPrite"
CoEdit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Ajustando Pedidos "+BARRA_STRING)

  NPED=[Numero do Pedido]

  Moveto "PedidoC"
  Moveto [Numero do Pedido]
  Locate NPED
  If Not RetVal
     Then Moveto "Answer"
          Loop
  EndIf        
  For cc From 1 to 10
    if Not IsLockRecord()
       Then QuitLoop
    EndIf
  EndFor

  If Not Carrega_Parametros()
     Then Moveto "Answer"
          Loop
  EndIf   

  Moveto "PedidoC"
  ;*** Dados da Empresa ***
  
  GetRecord "\\Sistemas\\Cadastro\\Empresas" [PedidoC->Codigo da Empresa] To Reg_Busca_Lookup
  If Retval 
     Then TPEMPR    =REG_BUSCA_LOOKUP["Tipo da Empresa"]
          ATIVEMPR  =REG_BUSCA_LOOKUP["Atividade"]
     Else TPEMPR    =""
          ATIVEMPR  ="??"
          Mensagem("Empresa: "+[PedidoC->Codigo da Empresa]+" nÆo cadastrada !")
  EndIf
      
  ;*** Aliquota do Estado ***
  Moveto [UF]
  Ativa_Lookup()
  Moveto [UF]
  Locate [PedidoC->UF]
  If RetVal
     Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
     Else UF_ALIQUOTA_ICMS=BlankNum()
  EndIf
  KeyPress "ESC"
  
  ;*** DESTINACAO ***
  TRIB_ICMS=""
  OPCAO_RED_BCICMS="1"

  Moveto [Codigo da Destinacao]
  Ativa_Lookup()
  Moveto [Codigo da Destinacao]
  Locate [PedidoC->Codigo da Destinacao]
  If RetVal
     Then If [ICMS Aliquota do Estado]<>"S"
             Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
          EndIf
          TRIB_ICMS=[Tributacao de ICMS]
          OPCAO_RED_BCICMS=[Sem Reducao BCICMS]
  EndIf
  KeyPress "ESC"

  ;*** TABELA DE PRECO ***
  If SYS_CODIGO_CLIENTE="0301"
     Then [Codigo da Tabela]=VSDGTABELA
  EndIF

  If SYS_CODIGO_CLIENTE="0222"
     Then 
          [Observacao na Nota Fiscal]=""
          [Observacao do Pedido     ]=""
  EndIf

  AgrupaB()
  Calc_Pedido()

	Do_It!

  Moveto "Answer"
  CoEditKey
EndScan
Do_It!
ClearAll

IMPPED=True
EndProc

;*******************************************************************************
;* Rotina para Agrupar os Itens                                                *
;*******************************************************************************
Proc AGRUPAB()
Private CODNOVO, i, ii, wi, PRECOUNIT, PRECOTAB 
              
For I From 1 to 900
    CODIGO[I]=""
    QUANTI[I]=BlankNum()
    QUANTF[I]=BlankNum()
    PRECOU[I]=BlankNum()
    PRECOT[I]=BlankNum()
EndFor

Moveto "Pedidoi"
Moveto [Numero do Pedido]
Locate NPED
If RetVal Then                    
  While [Numero do Pedido]=NPED

    switch
      case sys_Codigo_cliente="0301":
        CODNOVO=""

        Moveto "TbPrite"
        Moveto [Codigo da Tabela]
        Locate VSDGTABELA
        If RetVal
           Then While [Codigo da Tabela]=VSDGTABELA
                  Moveto [Preco Unitario]
                  If [Preco Unitario]=([Pedidoi->Preco Unitario]/2) ;50%
                     Then CODNOVO  =[Codigo do Item         ]
                          PRECOUNIT=[Pedidoi->Preco Unitario]/2 ;50%
                          QuitLoop
                  EndIf
                  Skip
                  If EOT() Then QuitLoop EndIf
                EndWhile
        EndIf 
        Moveto "Pedidoi"  
      
      otherwise                     :
      
        CODNOVO  =[Codigo do Item       ]
        CODNOVO  =PegaCodigoRaiz(CODNOVO)
      
        PRECOUNIT=[Preco Unitario       ]
        PRECOTAB =[Preco Unitario Tabela]
    
    endswitch
     
    If CODNOVO<>""
       Then
            Moveto [Codigo do Item]
            For I From 1 to 900
                If CODIGO[I]=CODNOVO
                   Then 
                        QUANTI[I]=QUANTI[I]+[Quantidade         ]
                        QUANTF[I]=QUANTF[I]+[Quantidade Faturada]
                        
                        QuitLoop
                   Else If CODIGO[I]=""
                           Then 
                                CODIGO[I]=CODNOVO

                                QUANTI[I]=[Quantidade         ]
                                QUANTF[I]=[Quantidade Faturada]

                                PRECOU[I]=PRECOUNIT
                                PRECOT[I]=PRECOTAB 
                                QuitLoop
                        Endif
                Endif
            Endfor
    EndIf        

    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile
EndIf

Moveto "Pedidoi"
Home
Moveto [Numero do Pedido]
Locate NPED
If RetVal 
   Then While [Numero do Pedido]=NPED
          Del
        EndWhile
EndIf

For I From 1 To 10
    AICMS[I] =BlankNum()
    AIPI[I]  =BlankNum()

    BCICMS[I] =BlankNum()
    BCIPI[I]  =BlankNum()

    VIICMS[I] =BlankNum()
    VIIPI[I]  =BlankNum()

    RICMS[I] =BlankNum()
    RIPI[I]  =BlankNum()
EndFor
        
Release Vars i        
        
VRBCSUBST=0
VRMERC=0
For wi From 1 to 900
    If IsBlank(CODIGO[wi])
       Then QuitLoop
    Endif

    Moveto [Numero do Pedido]
    End
    Down
    [Numero do Pedido]=NPED
    [Item do Pedido  ]=wi
    UnLockRecord

    Locate NPED,wi

    [Codigo do Item     ]=CODIGO[wi]
    [Quantidade         ]=QUANTI[wi]
    [Quantidade Faturada]=QUANTF[wi]

    switch
      case sys_codigo_Cliente="0079" : [Preco Unitario     ]=PRECOU[wi]
      case sys_codigo_Cliente="0301" : [Preco Unitario     ]=PRECOU[wi]
      case sys_codigo_Cliente="0171" : [Preco Unitario     ]=PRECOU[wi]

      case sys_codigo_Cliente="0274" : 
        if PRECOU[wi]<PRECOT[wi]
           then 
                [Preco Unitario     ]=PRECOU[wi]
           else 
                [Preco Unitario     ]=PRECOU[wi]
                Pega_Preco("Novo")
        endif   
      
      otherwise                      : [Preco Unitario     ]=PRECOU[wi]
                                       Pega_Preco("Novo")
    
    endswitch

    [Preco Total]   =Round([Preco Unitario]*[Quantidade],2)

    If [Tributacao de ICMS]="D"
      Then If TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0
              Then [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
              Else [Tributacao de Icms]=TRIB_ICMS                           
                   If Not IsBlank([Tipo Tributacao])
                      Then [Aliquota de ICMS]=BlankNum()
                           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
           EndIf
           If OPCAO_RED_BCICMS="1"
              Then [Aliquota Reduzida BCICMS]=BlankNum()
           EndIf
    EndIf

  ;* Seta Variaveis PegaCFOP
  Checa_CFOP      ="S"
  CFO_C           =[PedidoC->CFO      ]
  CFOP_TPITEM     =[Tipo do Item      ]
  CFOP_TRIBICMS   =[Tributacao de ICMS]
  CFOP_TPTRIB     =[Tipo Tributacao   ]
  CFOP_EMPRESA    =[PedidoC->Codigo da Empresa ]
  CFOP_ATIVEMPRESA=ATIVEMPR
  Play "\\Sistemas\\Exporta\\PegaCFOP"
  [CFO            ]=CFO_C
  [Tipo Tributacao]=CFOP_TPTRIB

  If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And  
    Search("MOSTR",[PedidoC->Descricao da Destinacao])>0       And
    SYS_CLIENTE_CONFEC<>""
    Then [CSOSN]="400"
  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 [Tributacao de ICMS]="D" And [Aliquota de ICMS]>0
     Then For II From 1 To 10
              If Not IsBlank(AICMS[II])
                 Then If AICMS[II]=[Aliquota de ICMS] And RICMS[II]=[Aliquota Reduzida BCICMS]
                         Then BCICMS[II]=BCICMS[II]+[Preco Total]
                              VIICMS[II]=VIICMS[II]+[Valor do ICMS]
                              QuitLoop
                      EndIf
                 Else AICMS[II] =[Aliquota de ICMS]
                      RICMS[II] =[Aliquota Reduzida BCICMS]
                      BCICMS[II]=[Preco Total]
                      VIICMS[II]=VIICMS[II]+[Valor do ICMS]
                      QuitLoop
              EndIf
          EndFor
  EndIf

  GetRecord "\\Sistemas\\Estoque\\Itens" [PedidoI->Codigo do Item] To Reg_Busca_Lookup
  If Retval
     Then If REG_BUSCA_LOOKUP["Tributacao de ICMS"]="S"
             Then VRBCSUBST=VRBCSUBST+[Preco Total]
          EndIf
  EndIf

  If [Tributacao de IPI]="D" And [Aliquota de IPI]>0
     Then For II From 1 To 10
             If Not IsBlank(AIPI[II])
                Then If AIPI[II]=[Aliquota de IPI]
                         Then BCIPI[II]=BCIPI[II]+[Preco Total]
                              VIIPI[II]=VIIPI[II]+[Valor do IPI]
                              QuitLoop
                      EndIf
                 Else AIPI[II] =[Aliquota de IPI]
                      RIPI[II] =BlankNum()
                      BCIPI[II]=[Preco Total]
                      VIIPI[II]=VIIPI[II]+[Valor do IPI]
                      QuitLoop
             EndIf
         EndFor
  EndIf

  If [Tipo do Item]<>"C"
     Then VRMERC=VRMERC+[Preco Total]
  EndIf

  Unlockrecord
Endfor

If SYS_CODIGO_CLIENTE="0301"
   Then Moveto "PedidoV"
   Moveto [Numero do Pedido]
   Locate NPED
   If RetVal
      Then While [Numero do Pedido]=NPED
             [Valor]=[Valor]/2 ;50%
             Skip
             If Eot() Then QuitLoop EndIf
           EndWhile
           Unlockrecord
   EndIf
EndIf   

EndProc

;*******************************************************************************
;* Rotina para Tabela de Preco                                                 *
;*******************************************************************************
Proc Pega_Preco(OpcaoP)
Private OpcaoP, TABPR, CPGTO, CodClie, CodRepr, CodItem,
        PesqOk, Registro_Tab_Preco, Registro_TabPreco_CondPagto,  regItens,
        wii,coditemtemp

If PARAM_TABPR_ITEM="S"
   Then TABPR=[PedidoI->Codigo da Tabela]
   Else TABPR=[PedidoC->Codigo da Tabela]
EndIf
CPGTO=[PedidoC->Condicao de Pagamento]

CodClie         =[PedidoC->Codigo                 ]
CodRepr         =[PedidoC->Codigo do Representante]
CodItem         =[PedidoI->Codigo do Item]

ITEM_PROMOCIONAL="N"
PesqOk          =False

GetRecord "\\Sistemas\\Estoque\\Itens" CodItem To regItens
If RetVal
   Then 
        If PARAM_UTILIZA_TABPR_CLIENTE="S"
           Then 
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprcit" TABPR, CodClie, coditemtemp To Registro_TabPreco_Item
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" ;;Or
                           ;;SYS_CODIGO_CLIENTE="0345"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
        If PARAM_UTILIZA_TABPR_REPRES="S" and Not PesqOk
           Then
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprrit" TABPR, CodRepr, coditemtemp To Registro_TabPreco_Item   
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" ;;Or
                           ;;SYS_CODIGO_CLIENTE="0345"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
        If Not PesqOk
           Then
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprite" TABPR, coditemtemp          To Registro_TabPreco_Item
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" ;;Or
                             ;;SYS_CODIGO_CLIENTE="0345"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
EndIf

If PesqOK
   Then ITEM_PROMOCIONAL=Registro_TabPreco_Item["Em Promocao"]

        If PARAM_PEGAPRECO_CPAGTO = "S"
           Then 
                PesqOk=False
                Moveto [Lookup_TabPreco_CondPagto]
                Ativa_Lookup()
                Moveto [Codigo da Tabela]
                Locate TABPR
                If RetVal
                   Then While [Codigo da Tabela] = TABPR
                          If [Condicao de Pagamento] = CPGTO
                             Then CopyToArray Registro_TabPreco_CondPagto
                                  PesqOK=True
                                  QuitLoop
                          EndIf
                          Skip
                          If Eot()
                             Then QuitLoop
                          Endif
                        EndWhile
                Endif
                KeyPress "ESC"
                If PesqOk
                   Then [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]+
                                                NDecimal(((Registro_TabPreco_Item["Preco Unitario"]*
                                                Registro_TabPreco_CondPagto["Taxa Financeira"])/100),2)
                        [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]+
                                                NDecimal(((Registro_TabPreco_Item["Preco Unitario"]*
                                                Registro_TabPreco_CondPagto["Taxa Financeira"])/100),2)

                        ;;If TX_DESCTO_CLIE>0
                        ;;   Then [Preco Unitario       ]=Round([Preco Unitario]-(([Preco Unitario]*TX_DESCTO_CLIE)/100),2)
                        ;;        [Preco Unitario Tabela]=[Preco Unitario]
                        ;;EndIf

                   Else [Preco Unitario       ]=BlankNum()
                        [Preco Unitario Tabela]=BlankNum()

                        MSG="Pedido "+NPED+", Item "+[PedidoI->Codigo do Item]+" "+[PedidoI->Descricao do Item]+"// //"
                        MSG=MSG+"sem pre‡o na Tabela "+TABPR+", verificar !// // "
                        MSG=MSG+"Item do Pedido com pre‡o errado, verificar !"
                        Mensagem(MSG)
                EndIf
           Else [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
                [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]
        EndIf
   Else 
        [Preco Unitario       ]=BlankNum()
        [Preco Unitario Tabela]=BlankNum()

        MSG="Pedido "+NPED+", Item "+[PedidoI->Codigo do Item]+" "+[PedidoI->Descricao do Item]+"// //"
        MSG=MSG+"sem pre‡o na Tabela "+TABPR+", verificar !// // "
        MSG=MSG+"Item do Pedido com pre‡o errado, verificar !"
        Mensagem(MSG)
EndIf
Moveto "PedidoI"

Return True
EndProc ;(Pega_Preco)

;****************************************+**************************************
;* Rotina para Calculo de Valores do Pedido                                    *
;*******************************************************************************
Proc CALC_PEDIDO()
Private i

Moveto "PedidoC"

[Valor Mercadoria]=VRMERC
If [Taxa de Desconto]>0
   Then VRDESCTO=Round((VRMERC*[Taxa de Desconto])/100,2)
        TXDESCTO_TOTAL=[Taxa de Desconto]
   Else VRDESCTO=[Valor do Desconto]
        TXDESCTO_TOTAL=(VRDESCTO/VRMERC)*100
EndIf
[Valor Desconto          ]=VRDESCTO
[Valor Mercadoria Liquido]=[Valor Mercadoria]-VRDESCTO

VRBCICMS=0
VRICMS  =0
VRIPI   =0
VRNF    =0

For I From 1 To 10
    If Not IsBlank(AICMS[I])
       Then If BCICMS[I]>0
               Then 
                    Switch
                      Case OPCAO_RED_BCICMS="3" And RICMS[I]>0:
                           VBC=BCICMS[I]
                           VBC=Round(VBC-((VBC*RICMS[I])/100),2)
                      Case OPCAO_RED_BCICMS="4" And RICMS[I]>0:
                           VBC=BCICMS[I]-Round(((BCICMS[I]*TXDESCTO_TOTAL)/100),2)
                           If TXDESCTO_TOTAL>0
                              Then VBC=Round(VBC-((VBC*RICMS[I])/100),2)
                           EndIf   
                      OtherWise:
                           VBC=BCICMS[I]-Round(((BCICMS[I]*TXDESCTO_TOTAL)/100),2)
                           VBC=Round(VBC-((VBC*RICMS[I])/100),2)
                    EndSwitch
                    
                    VRBCICMS=VRBCICMS+VBC
                    VRICMS=Round(VRICMS+((VBC*AICMS[I])/100),2)
               Else VRICMS=VRICMS+VIICMS[I]
            EndIf
    EndIf
    If Not IsBlank(AIPI[I])
       Then If BCIPI[I]>0
               Then VBC=BCIPI[I]-Round((BCIPI[I]*TXDESCTO_TOTAL)/100,2)
                    VBC=VBC-Round((VBC*RIPI[I])/100,2)
                    VRIPI=VRIPI+Round((VBC*AIPI[I])/100,2)
               Else VRIPI=VRIPI+VIIPI[I]
            EndIf
    EndIf
EndFor

If SYS_CODIGO_CLIENTE="0167"
   Then [Valor BCSubstituicao ICMS]=0
        [Valor Substituicao ICMS  ]=0
        If ([CFO]="5101" Or [CFO]="5401") And [Consumidor Final]="N"
           Then If VRBCSUBST>0
                   Then ;;;;;;[Valor BCSubstituicao ICMS]=VRBCSUBST-((VRBCSUBST*[Valor Desconto])/[Valor Mercadoria])
                        [Valor BCSubstituicao ICMS]=VRBCSUBST
                        [Valor BCSubstituicao ICMS]=[Valor BCSubstituicao ICMS]+Round(([Valor BCSubstituicao ICMS]*35)/100,2)
                        [Valor Substituicao ICMS  ]=Round(([Valor BCSubstituicao ICMS]*UF_ALIQUOTA_ICMS)/100,2)
                        [Valor Substituicao ICMS  ]=[Valor Substituicao ICMS  ]-Round((VRBCSUBST*UF_ALIQUOTA_ICMS)/100,2)
                EndIf
        EndIf
EndIf

[Valor BCICMS]=VRBCICMS
[Valor ICMS  ]=VRICMS
[Valor IPI   ]=VRIPI
[Valor Nota Fiscal]=[Valor Mercadoria Liquido]+[Valor IPI]+[Valor Despesas Acessorias]+
                    [Valor Substituicao ICMS]+[Valor do Seguro]

VRNF=[Valor Nota Fiscal]

If [Aliquota BCFrete Nota]>0
   Then [Valor do Frete]=Round(([Valor Nota Fiscal]*[Aliquota BCFrete Nota])/100,2)
EndIf

If [Frete Incluso na Nota]="+"
   Then [Valor Nota Fiscal]=[Valor Nota Fiscal]+[Valor do Frete]
        If [Aliquota BCICMS Frete]>0
           Then [Valor BCICMS]=[Valor BCICMS]+Round(([Valor do Frete]*[Aliquota BCICMS Frete])/100,2)
                [Valor ICMS  ]=[Valor ICMS]+Round(((([Valor do Frete]*[Aliquota BCICMS Frete])/100)*[Aliquota de ICMS Frete])/100,2)
           Else [Valor BCICMS]=[Valor BCICMS]+[Valor do Frete]
                [Valor ICMS  ]=[Valor ICMS]+Round(([Valor do Frete]*[Aliquota de ICMS Frete])/100,2)
        EndIf
EndIf

If [Consumidor Final]="S"
   Then [Valor BCICMS]=[Valor Nota Fiscal]
        [Valor ICMS  ]=Round(([Valor BCICMS]*UF_ALIQUOTA_ICMS)/100,2)
EndIf
UnLockRecord

EndProc

;*******************************************************************************
;* Rotina para Calculo de Vencimentos                                          *
;*******************************************************************************
Proc CALC_VENCTOS()
Private NPC, i, j, VRVENCTO, VRDIFERE, VREF

If IsBlank([PedidoC->Composicao de Dias])
   Then Return
EndIf
If Not Checa_CompDias([PedidoC->Composicao de Dias])
   Then Return
EndIf

Moveto "PedidoV"
Moveto [Numero do Pedido]
Locate NPED
If RetVal 
   Then
  While [Numero do Pedido]=NPED
    Del
  EndWhile
EndIf

NPC=1
i=1
If Not IsBlank([PedidoC->Composicao de Dias])
   Then While True
          pos_s=SearchFrom("/",[PedidoC->Composicao de Dias],i)
          If pos_s=0
             Then QuitLoop
             Else NPC=NPC+1
                  i=pos_s+1
          EndIf
        EndWhile
   Else NPC=0
EndIf
If NPC=0
   Then NP=[PedidoC->Numero de Parcelas]
   Else If NPC=1 And [PedidoC->Numero de Parcelas]>1
           Then NP=[PedidoC->Numero de Parcelas]
           Else NP=NPC
        EndIf
EndIf

VRVENCTO=NDecimal(([PedidoC->Valor Nota Fiscal]/NP),2)
VRDIFERE=[PedidoC->Valor Nota Fiscal]-(VRVENCTO*NP)

If PARAM_COMIS_VENCTO="S"
   Then VREF=NDecimal(([PedidoC->Valor Nota Fiscal]*[PedidoC->Comissao do Representante])/100,2)
        VCVENCTO=NDecimal((VREF/NPC),2)
        VCDIFERE=VREF-(VCVENCTO*NPC)
   Else VCVENCTO=BlankNum()
        VCDIFERE=BlankNum()
EndIf

j=1
i=1
While i<=NP
  pos_s=SearchFrom("/",[PedidoC->Composicao de Dias],j)
  If pos_s=0
     Then If i>1
             Then NDIAS=NumVal(SubStr([PedidoC->Composicao de Dias],j,(Len([PedidoC->Composicao de Dias])-(j-1))))
             Else If Not IsBlank([PedidoC->Composicao de Dias])
                     Then NDIAS=NumVal(SubStr([PedidoC->Composicao de Dias],j,Len([PedidoC->Composicao de Dias])))
                     Else NDIAS=0
                  EndIf
          EndIf
     Else NDIAS=NumVal(SubStr([PedidoC->Composicao de Dias],j,pos_s-j))
          j=pos_s+1
  EndIf

  End
  Down
  [Numero do Pedido ]=NPED
  [Sequencia        ]=AlinhM(StrVal(i),2)
  If pos_s=0 And NPC=1 And NP>1
     Then [Numero de Dias   ]=BlankNum()
          If PARAM_DATAS_VENCTOS="F"
             Then DIA_VECTO=Day([PedidoC->Data de Entrega])
                  MES_VECTO=Month([PedidoC->Data de Entrega])
                  ANO_VECTO=Year([PedidoC->Data de Entrega])
                  MES_VECTO=MES_VECTO+i
                  If MES_VECTO>12                
                     Then Switch
                            Case MES_VECTO>48 : ANO_AUXILIAR=4
                            Case MES_VECTO>36 : ANO_AUXILIAR=3
                            Case MES_VECTO>24 : ANO_AUXILIAR=2
                            Case MES_VECTO>12 : ANO_AUXILIAR=1
                          EndSwitch       
                          MES_VECTO=MES_VECTO-(12*ANO_AUXILIAR)
                          ANO_VECTO=ANO_VECTO+(1*ANO_AUXILIAR)
                  EndIf
                  ;*********** Verificando o Ultimo dia do Mˆs *****************     
                  Switch
                    Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                         DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)         
                    Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)    
                  EndSwitch
                  [Data             ]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+SubStr(StrVal(ANO_VECTO),3,2))
             Else [Numero de Dias   ]=NDIAS*i
                  [Data             ]=[PedidoC->Data de Emissao]+(NDIAS*i)
          EndIf
     Else [Numero de Dias   ]=NDIAS
          [Data             ]=[PedidoC->Data de Entrega]+NDIAS
  EndIf
  If i<>NP
     Then [Valor            ]=VRVENCTO
          [Valor da Comissao]=VCVENCTO
     Else [Valor            ]=VRVENCTO+VRDIFERE
          [Valor da Comissao]=VCVENCTO+VCDIFERE
  EndIf
  [Forma de Pagamento]=[PedidoC->Forma de Pagamento]
  UnLockRecord

  i=i+1
EndWhile

Moveto "PedidoC"

EndProc

;*******************************************************************************
;* Rotina para Checagem de Composicao de Dias                                  *
;*******************************************************************************
Proc Checa_CompDias(Texto)
Private Texto,Contador_Repeticao, ncc

Contador_Repeticao=0
For ncc From 1 To Len(Texto)
    If Asc(SubStr(Texto,ncc,1))<47 Or
       Asc(SubStr(Texto,ncc,1))>57
       Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
            Return False
       Else If SubStr(Texto,ncc,1)="/"
               Then Contador_Repeticao=Contador_Repeticao+1
               Else Contador_Repeticao=0
            EndIf
            If Contador_Repeticao>1 Or
               SubStr(Texto,1,1)="/" Or
               SubStr(Texto,Len(Texto),1)="/"
               Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
                    Return False
            EndIf
    EndIf
EndFor
Return True
EndProc

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()

If IsEmpty("P_Pedido")
   Then Mensagem("Não esta Configurado os Parametros para Digita‡„o !")
        Return False
EndIf

Moveto "P_Pedido"
Moveto [Codigo_Empresa]
Locate [PedidoC->Codigo da Empresa]
If Not RetVal
   Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
        Return False
EndIf

PARAM_DESTINACAO               =[Codigo_Destinacao    ]
PARAM_RELATORIO                =[Script_Impressao     ]
PARAM_RELATORIO_S              =[Script_Impressao_S   ]
PARAM_DATAS_VENCTOS            =[Datas_Vencimentos    ]
PARAM_COR_TECIDO               =[Cor_Tecido           ]
PARAM_TAMANHO                  =[Tamanho              ]
PARAM_DESCUNIT                 =[Desconto Unitario    ]
PARAM_VOLUMES                  =[Volumes              ]
PARAM_SUBSTICMS                =[Substituicao ICMS    ]
PARAM_IMPOSTOS                 =[Impostos             ]
PARAM_TABELA_PRECO             =[Tabela_Preco         ]
PARAM_TRANSPORTADORA           =[Codigo_Transportadora]
PARAM_FORMA_PAGTO              =[Codigo_Forma_Pagto   ]
PARAM_COMIS_ITEM               =[Comissao_Item        ]
PARAM_COMIS_MARCA              =[Utiliza_Comissao_Marca   ]

PARAM_TABPR_ITEM               =[Utiliza_Tabela_Preco_Item]
PARAM_COMIS_VENCTO             =[Calcula_Comissao_Vencto  ]
PARAM_VISITA                   =[Utiliza_Visita           ]
PARAM_UTILIZA_TABPR_CLIENTE    =[Utiliza_TabPreco_Cliente ]
PARAM_UTILIZA_TABPR_REPRES     =[Utiliza_TabPreco_Repres  ]
PARAM_PEGAPRECO_CPAGTO         =[Pega_Preco_Tabela_CPagto ]
PARAM_ALTERA_PRECO             =[Utiliza_Alteracao_Preco  ]
PARAM_CALCIMPOSTOS             =[Utiliza_Calculo_Impostos ]
Moveto "Answer"
Return True

EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_DTREF"         : Campo="TG_DTFIM"
            Case Campo="TG_OPCAO1"        : Campo="TG_DTREF"
            Case Campo="TG_OPCAO2"        : Campo="TG_OPCAO1" 
            Case Campo="TG_OPCAO3"        : Campo="TG_OPCAO2"
            Case Campo="TG_DRIVES"        : 
                 If CheckTG_OPCAO[3]
                    Then Campo="TG_TABELA"
                    Else Campo="TG_OPCAO3"
                 EndIf   
            Case Campo="TG_TABELA"        : Campo="TG_OPCAO3"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA" : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"   : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"   : Campo="TG_DTREF"
                    Case Campo="TG_DTREF"   : Campo="TG_OPCAO1"
                    Case Campo="TG_OPCAO1"  : Campo="TG_OPCAO2"
                    Case Campo="TG_OPCAO2"  : Campo="TG_OPCAO3"
                    Case Campo="TG_OPCAO3"  : 
                         If CheckTG_OPCAO[3]
                            Then Campo="TG_TABELA" 
                            Else If Not CheckTG_OPCAO[3]
                                    Then VSDGTABELA=""
                                         VSDGNOMTAB=""
                                 EndIf
                                 Campo="TG_DRIVES"       
                         EndIf   
                    Case Campo="TG_TABELA"  :
                         If Not CheckTG_OPCAO[3]
                            Then VSDGTABELA=""
                                 VSDGNOMTAB=""
                         EndIf   
                         If Not IsBlank(VSDGTABELA)
                            Then Campo="TG_DRIVES"
                            Else VSDGNOMTAB=""
                         EndIf
                    Case Campo="TG_DRIVES"  :
                         VSDGDRIVE=ControlValue("TG_DRIVES")
                         If Not CheckTG_OPCAO[3]
                            Then VSDGTABELA=""
                                 VSDGNOMTAB=""
                         EndIf  
                         Campo="YES"
                  EndSwitch
          EndIf
   EndSwitch
EndIf
Switch
  Case Campo="TG_OPCAO1" or Campo="TG_OPCAO2" or Campo="TG_OPCAO3":
       MensagemCheckBoxes()   
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc


Proc Deleta_Arquivos()

  Deleta_Arquivo(VSDGDRIVE+"\\Pedido*.DB")
  Deleta_Arquivo(VSDGDRIVE+"\\Pedido*.MB")
  Deleta_Arquivo(VSDGDRIVE+"\\Pedido*.PX")

  Deleta_Arquivo(VSDGDRIVE+"\\Accarrg*.DB")
  Deleta_Arquivo(VSDGDRIVE+"\\Accarrg*.MB")
  Deleta_Arquivo(VSDGDRIVE+"\\Accarrg*.PX")

  Deleta_Arquivo(VSDGDRIVE+"\\Destinat*.DB")
  Deleta_Arquivo(VSDGDRIVE+"\\Destinat*.MB")
  Deleta_Arquivo(VSDGDRIVE+"\\Destinat*.PX")

  Deleta_Arquivo(VSDGDRIVE+"\\Itens*.DB")
  Deleta_Arquivo(VSDGDRIVE+"\\Itens*.MB")
  Deleta_Arquivo(VSDGDRIVE+"\\Itens*.PX")

  Deleta_Arquivo(VSDGDRIVE+"\\Iten_*.DB")
  Deleta_Arquivo(VSDGDRIVE+"\\Iten_*.MB")
  Deleta_Arquivo(VSDGDRIVE+"\\Iten_*.PX")

	Sleep 2000
EndProc

;*******************************************************************************
;* Rotina para gerar o log de registro por usu rio                             *
;*******************************************************************************
Proc Gera_Log()          

If VSDGDTINI<>BlankDate()
   Then AUX_DATA = ", periodo de "+StrVal(VSDGDTINI)+" ate "+StrVal(VSDGDTFIM)
   Else AUX_DATA = ", periodo ate "+StrVal(VSDGDTFIM)
EndIf   
          
If VSDGDTREF<>BlankDate()
   Then AUX_DTREF = ", data de transa‡„o em "+StrVal(VSDGDTREF)
   Else AUX_DTREF = ""
EndIf

If VSDGTABELA<>""
   Then AUX_TABELA = ", Tabela: "+VSDGTABELA
   Else AUX_TABELA = ""
EndIf   

AUX_OPCAO = ""
If CheckTG_OPCAO[1] Or CheckTG_OPCAO[2] Or CheckTG_OPCAO[3]
   Then AUX_OPCAO = "opcoes marcadas para "
EndIf   
If CheckTG_OPCAO[1] Then AUX_OPCAO = AUX_OPCAO + "substituir pedidos, " EndIf
If CheckTG_OPCAO[2] Then AUX_OPCAO = AUX_OPCAO + "importar pedidos, " EndIf
If CheckTG_OPCAO[3] Then AUX_OPCAO = AUX_OPCAO + "agrupar itens por preco, " EndIf
AUX_OPCAO = Rtrim(AUX_OPCAO)
If SubStr(AUX_OPCAO,Len(AUX_OPCAO),1)="," Then AUX_OPCAO = Substr(AUX_OPCAO,1,Len(AUX_OPCAO)-1) EndIf
If AUX_OPCAO <> "" Then AUX_OPCAO = ", "+AUX_OPCAO EndIf

MSG =  "Empresa "+VSDGEMPRESA + AUX_DATA + AUX_DTREF + AUX_TABELA + AUX_OPCAO + ", Drive "+VSDGDRIVE
Grava_Logt("#","RestauPD",MSG)  

EndProc ;Gera_Log()

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Vendas\\Bib_Vend"

LimpAguarde()
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999" EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"    EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""      EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""    EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""    EndIf

If SYS_CODIGO_CLIENTE="0301"
   Then SYS_CLIENTE_CONFEC="0301"
EndIf   

Array CODIGO[900]
Array QUANTI[900]
Array QUANTF[900]
Array PRECOU[900]
Array PRECOT[900]

Array AICMS[10]
Array AIPI[10]

Array VIICMS[10]
Array VIIPI[10]

Array BCICMS[10]
Array BCIPI[10]

Array RICMS[10]
Array RIPI[10]

Array Dt_Vencto[12]
Array Vr_Vencto[12]
Array ND_Vencto[12]
Array VC_Vencto[12]

VSDGEMPRESA=""
VSDGDTINI  =BlankDate()
VSDGDTFIM  =Today()-1
VSDGDTREF  =BlankDate()

DynArray Array_Drives[]
SysInfo Drives To Array_Drives
;;VSDGDRIVE=SubStr(Directory(),1,2)
VSDGDRIVE="C:"

Array TG_OPCAO[3]
TG_OPCAO[1]="Substituir pedidos/carregamentos existentes"
TG_OPCAO[2]="Importar pedidos com sua situa‡„o original"
TG_OPCAO[3]="Agrupar itens por pre‡o unit rio"

Array CheckTG_OPCAO[ArraySize(TG_OPCAO)]
CheckTG_OPCAO[1]=False
CheckTG_OPCAO[2]=False
CheckTG_OPCAO[3]=False

While True
  ShowDialog "Importa‡„o de pedidos" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 03,14   Height 18 Width 72

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMP" To VSDGNOMEMP

    Label  @ 02,00 "Per¡odo EmissÆo de" For "TG_DTINI"
    Accept @ 03,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,16 "at‚" For "TG_DTFIM"
    Accept @ 03,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 04,00 "Data Transa‡„o" For "TG_DTREF"
    Accept @ 05,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREF" To VSDGDTREF

    Label  @ 00,35 "Drives:" For "TG_DRIVES"
    PickDynArrayIndex @ 01,36 Height 4 width 33
     Columns 7
      Array_Drives
       Tag "TG_DRIVES"
        To VSDGDRIVE


    CheckBoxes @ 07,00 Height 1 Width 50 Tag "TG_OPCAO1"
    TG_OPCAO[1] to CheckTG_OPCAO[1]

    CheckBoxes @ 08,00 Height 1 Width 50 Tag "TG_OPCAO2"
    TG_OPCAO[2] to CheckTG_OPCAO[2]

    CheckBoxes @ 10,00 Height 1 Width 50 Tag "TG_OPCAO3"
    TG_OPCAO[3] to CheckTG_OPCAO[3]


    Label  @ 11,00 "Tabela"  For "TG_TABELA"
    Accept @ 12,01 Width 08 "A5"  Picture "#*#" Tag "TG_TABELA" To VSDGTABELA
    Accept @ 12,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMTAB" To VSDGNOMTAB        


    Pushbutton @ 14,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 14,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  IMPCLI=False
  IMPITE=False
  IMPCAR=False
  IMPPED=False
  
  If CheckTG_OPCAO[3]
     Then If SYS_CODIGO_CLIENTE<>"0301"
             Then Mensagem("Op‡„o Inv lida!//Imposs¡vel agrupamento de itens por pre‡o unit rio!// //Verificar com o Suporte!")
                  Loop
          EndIf 
  EndIf
  
  If SYS_CODIGO_CLIENTE="0301" And Not CheckTG_OPCAO[3]
     Then Mensagem("Selecionar o agrupamento de itens para prosseguir!")
          Loop
  EndIf
  
  If VSDGTABELA<>"" And Not CheckTG_OPCAO[3]
     Then VSDGNOMTAB=""
          VSDGTABELA=""
  EndIf
  
	Deleta_Arquivos()
	Gera_Log()
  
  If VSDGEMPRESA="" 
    Then CODEMP="0000" 
    Else CODEMP=VSDGEMPRESA
  EndIf

  ARQ_ARJ="PT_PED_"+CODEMP+"_"+
          AlinhM(StrVal(Year(VSDGDTREF)),4) +
          AlinhM(StrVal(Month(VSDGDTREF)),2)+
          AlinhM(StrVal(Day(VSDGDTREF)),2)  +
          ".ARJ"

	Aguarde("Aguarde, Descompactando arquivos de "+VSDGDRIVE+"\\"+ARQ_ARJ)
  Executa_Programa("c:\\vise\\Varj.exe e -y "+VSDGDRIVE+"\\"+ARQ_ARJ+" "+VSDGDRIVE+"\\")
  Sleep 3000

  If CheckTG_OPCAO[1]
     Then Excluir_Pedidos()
          Excluir_Carregamentos()
  EndIf

  Clientes()
  Itens()
  Carregamentos()
  If Pedidos()
    Then Ajusta_Pedidos()
         Delete Tabela
  EndIf  

	Deleta_Arquivos()
  Limpaguarde()
       
  If IMPCLI And IMPITE And IMPCAR And IMPPED
     Then ARQ_IMP=VSDGDRIVE+"\\IMPORTADO_"+
                  Substr(ARQ_ARJ,1,20)+"_"+
                  Substr(Time(),1,2)  +
                  Substr(Time(),4,2)  +
                  Substr(Time(),7,2)  +
                  ".ARJ"
          
          ExecVise("REN "+VSDGDRIVE+"\\"+ARQ_ARJ+" \""+ARQ_IMP+"\"")
          Sleep 1000
          
          MENSAGEM("Opera‡„o Finalizada !")
     Else MENSAGEM("Opera‡„o Cancelada !")
  EndIf        
  
EndWhile
ClearAll
Release Vars All
Release Procs All
