;** ImpPda01 *******************************************************************
;* Importacao de Dados PDA Sistemas Edmar                                      *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 11/10/2005 por Anivel Augusto Rodrigues
;Ultima Alteracao: 23/05/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Novo Cliente
;Ultima Alteracao: 14/08/2007 por Antonio Marcelo Alves
;Motivo Alteracao: Ajustes Deleta_Arquivo
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando for parcelas fixas "PARAM_DATAS_VENCTOS" 
;Ultima Alteracao: 21/08/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Situacao do Cliente" p/ permitir situa‡Æo como OTIMO
;Ultima Alteracao: 10/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Biblioteca Bib_Ven                  
;Ultima Alteracao: 27/05/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 19/10/2017 por Bruno Carvalho
;Motivo Alteracao: Removido de Importa() e Calc_Imposto() -> Aliquota Reduzida BCIPI
;Ultima Alteracao: 20/10/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes CALC_VOLUMES() -> DMARCA e DUNID p/ pegar valores no cadastro de itens
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc Importa()
ClearAll
CHAVEC=1

NregPed=0
LidoPed=0
ImpoPed=0
SyncPed=0
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\DestObs"
View "\\Sistemas\\Cadastro\\End_Cob"
View "\\Sistemas\\Cadastro\\TpPagto"
View "PedidoC"
View "PedidoI"
View "PedidoV"
View "PDA_CLIE"
View "PDA_PEDI"
SetHighLight Current Record 23 Field 31
CoEdit "PDA_PEDC"
SetHighLight Current Record 23 Field 31
NR = NRecords("PDA_PEDC")
NregPed=NR
Scan
  LidoPed=LidoPed+1

  Barra(NR, RecNo())
  Aguarde("Aguarde, Importando Pedidos "+BARRA_STRING)

;;If [PDA_PEDC->Status_ped]="S"
;;   Then SyncPed=SyncPed+1
;;        Loop
;;EndIf

  PEDORIG=SubStr([PDA_PEDC->Vend_ped],2,4)+"/"+AlinhM(StrVal([PDA_PEDC->Num_ped]),6)
  PED_OK=True
  Moveto "PedidoC"
  Moveto [Numero Pedido Origem]
  Locate PEDORIG
  If RetVal
     Then While True
            If [Situacao do Pedido]<>"CANCELADO"
               Then If [Codigo do Representante]=AlinhM(StrVal(NumVal([PDA_PEDC->Vend_ped])),4) And
                       [Data de Emissao]=[PDA_PEDC->Dat_ped]
                       Then ;;MSG="Pedido do PDA N§ "+AlinhM(StrVal([PDA_PEDC->NUM_PED]),6)+" j  existe no sistema !// //"
                            ;;MSG=MSG+"Pedido Origem: "+PEDORIG+", Pedido Sistema: "+[Numero do Pedido]
                            ;;Mensagem(MSG)

                            SyncPed=SyncPed+1
                            PED_OK=False
                            QuitLoop
                    EndIf
            EndIf
            Skip
            If EOT() Then Quitloop EndIf
            Locate Next PEDORIG
            If Not RetVal
               Then QuitLoop
            EndIf
          EndWhile
  EndIf
  If Not PED_OK
     Then Moveto "PDA_PEDC"
          ;;CONFGERAL("Deseja continuar com a importa‡„o ?")
          ;;If OK<>"S"
          ;;   Then QuitLoop
          ;;   Else Loop
          ;;EndIf

          Loop
  EndIf

  OBSIMP=""

  ClieNew=False
  If NumVal([PDA_PEDC->Cli_ped])>=30000
     Then
          OBSIMP="** CLIENTE NOVO **"

          CodClieNew=""
          ClieNew   =True
          Moveto "PDA_CLIE"
          Moveto [Codtmp_cli]
          Locate [PDA_PEDC->Cli_ped]
          If RetVal
             Then If Not IsBlank([PDA_CLIE->CGC_CLI]) And
                     [PDA_CLIE->CGC_CLI]<>"00000000000000"
                     Then ;;Pesq_CNPJ_CPF=[PDA_CLIE->CGC_CLI]
                          Pesq_CNPJ_CPF=SubStr([PDA_CLIE->CGC_CLI],01,2)+"."+
                                        SubStr([PDA_CLIE->CGC_CLI],03,3)+"."+
                                        SubStr([PDA_CLIE->CGC_CLI],06,3)+"/"+
                                        SubStr([PDA_CLIE->CGC_CLI],09,4)+"/"+
                                        SubStr([PDA_CLIE->CGC_CLI],13,2)
                     Else ;;Pesq_CNPJ_CPF=[PDA_CLIE->CPF_CLI]
                          Pesq_CNPJ_CPF=SubStr([PDA_CLIE->CPF_CLI],01,3)+"."+
                                        SubStr([PDA_CLIE->CPF_CLI],04,3)+"."+
                                        SubStr([PDA_CLIE->CPF_CLI],07,3)+"-"+
                                        SubStr([PDA_CLIE->CPF_CLI],10,2)
                  EndIf

                  Moveto "\\Sistemas\\Cadastro\\Destinat"
                  Moveto [CGC]
                  Locate Pesq_CNPJ_CPF
                  If RetVal
                     Then CodClieNew=[Codigo]
                     Else Moveto [Codigo]
                          While True
                            End
                            CodClieNew=AlinhM(StrVal(NumVal([Codigo])+1),4)
                            Down
                            [Codigo]=CodClieNew
                            If Not IsLockRecord()
                               Then QuitLoop
                               Else Del
                            EndIf
                          EndWhile

                          [Tipo                   ]="C"
                          [Nome Fantasia EmitDest ]=[PDA_CLIE->FANT_CLI  ]
                          [Razao Social           ]=[PDA_CLIE->NOME_CLI  ]
                          [Endereco               ]=[PDA_CLIE->END_CLI   ]
                          [Bairro                 ]=[PDA_CLIE->BAIRRO_CLI]
                          [CEP                    ]=SubStr([PDA_CLIE->CEP_CLI],1,2)+"."+
                                                    SubStr([PDA_CLIE->CEP_CLI],3,3)+"-"+
                                                    SubStr([PDA_CLIE->CEP_CLI],6,3)
                        ;;[CEP                    ]=[PDA_CLIE->CEP_CLI]
                          [Cidade                 ]=[PDA_CLIE->CIDADE_CLI]
                          [UF                     ]=[PDA_CLIE->ESTADO_CLI]
                          [Telefone               ]=[PDA_CLIE->FONE_CLI  ]
                          ;;[IE                     ]=[PDA_CLIE->INSEST_CLI]
                          If IsBlank([PDA_CLIE->INSEST_CLI])
                             Then [IE]="ISENTO"
                             Else [IE]=SubStr([PDA_CLIE->INSEST_CLI],01,2)+"."+
                                       SubStr([PDA_CLIE->INSEST_CLI],03,6)+"."+
                                       RTrim(SubStr([PDA_CLIE->INSEST_CLI],09,4))
                          EndIf
                          [Endereco_Eletronico    ]=[PDA_CLIE->EMAIL     ]
                          [Data_Cadastro          ]=[PDA_CLIE->DT_CAD_CLI]

                          ;12 345 678 9012 34
                          ;##.###.###/####-##  CGC
                          ;123 456 789 01
                          ;###.###.###-##      CPF

                          If Not IsBlank([PDA_CLIE->CGC_CLI]) And
                             [PDA_CLIE->CGC_CLI]<>"00000000000000"
                             Then [Tipo Pessoa]="JURIDICA"
                                  ;;[Cgc        ]=[PDA_CLIE->CGC_CLI]
                                  [Cgc        ]=Pesq_CNPJ_CPF
                             Else [Tipo Pessoa]="FISICA"
                                  ;;[Cgc        ]=[PDA_CLIE->CPF_CLI]
                                  [Cgc        ]=Pesq_CNPJ_CPF
                          EndIf

                          [Codigo do Representante]=AlinhM(StrVal(NumVal([PDA_PEDC->Vend_ped])),4)
                          [Nome Fantasia Represent]=VSDGNOMREPR

                          [Conta Contabil         ]="PALM "+AlinhM(StrVal([PDA_PEDC->Cli_ped]),5)
                          [Consumidor Final       ]="N"
                          [Inativo                ]="N"
                          [Situacao do Cliente    ]="OTIMO"
                          [Pais                   ]="BRASIL"
                          [Tipo Assistencia       ]="EVENTUAL"

                          [Data da Manutencao     ]=Today()
                          [Hora da Manutencao     ]=Time()
                          [Chapa                  ]=  SYS_CHAPA_USUARIO
                          UnLockRecord

                          If Not IsBlank([PDA_CLIE->PRACA_CLI ])
                             Then
                                  Moveto "\\Sistemas\\Cadastro\\End_Cob"
                                  Moveto [Codigo]
                                  Locate CodClieNew
                                  If Not RetVal
                                     Then End
                                          Down
                                          [Codigo              ]=CodClieNew
                                          [Endereco de Cobranca]=[PDA_CLIE->PRACA_CLI ]
                                        ;;[CEP de Cobranca     ]=[PDA_CLIE->CEP_COB]
                                          [CEP de Cobranca     ]=SubStr([PDA_CLIE->CEP_COB],1,2)+"."+
                                                                 SubStr([PDA_CLIE->CEP_COB],3,3)+"-"+
                                                                 SubStr([PDA_CLIE->CEP_COB],6,3)
                                          [Cidade de Cobranca  ]=[PDA_CLIE->CID_COB   ]
                                          [UF de Cobranca      ]=[PDA_CLIE->UF_COB    ]
                                          UnLockRecord
                                  EndIf
                          EndIf

                          If Not IsBlank([PDA_CLIE->OBS_CLI])
                             Then
                                  Moveto "\\Sistemas\\Cadastro\\DestObs"
                                  Moveto [Codigo]
                                  Locate CodClieNew
                                  If Not RetVal
                                     Then End
                                          Down
                                          [Codigo     ]=CodClieNew
                                          [Observacoes]=[PDA_CLIE->OBS_CLI]
                                          UnLockRecord
                                  EndIf
                          EndIf
                  EndIf
          EndIf
  EndIf

  Moveto "PedidoC"
  While True
    End
    Moveto [Numero do Pedido]
    If Numero_Lancamento("Interno","Locked_Down")
       Then NPED = PROXLANCTO_NLANC
            Release Vars PROXLANCTO_NLANC
            quitloop
    EndIf    
  EndWhile
  
 ;Moveto [Numero do Pedido]
 ;While True
 ;  End
 ;  If Numero_Lancamento("Interno","")
 ;     Then NPED = PROXLANCTO_NLANC
 ;          Release Vars PROXLANCTO_NLANC
 ;  EndIf
 ;  Down
 ;  [Numero do Pedido]=NPED
 ;  If IsLockRecord()
 ;     Then Del
 ;     Else QuitLoop
 ;  EndIf
 ;EndWhile

  ImpoPed=ImpoPed+1
  [Codigo da Empresa        ]=VSDGEMPRESA
  [Data de Emissao          ]=[PDA_PEDC->Dat_ped]
  [Data de Entrega          ]=[Data de Emissao  ]
  If Not ClieNew
     Then [Codigo                   ]=AlinhM(StrVal([PDA_PEDC->Cli_ped]),4)
     Else [Codigo                   ]=CodClieNew
  EndIf

  Enderecos()

  [Codigo do Representante  ]=AlinhM(StrVal(NumVal([PDA_PEDC->Vend_ped])),4)
  [Nome Fantasia Represent  ]=VSDGNOMREPR
  [Condicao de Pagamento    ]=AlinhM(StrVal([PDA_PEDC->Condpg_ped]),2)

  Moveto "\\Sistemas\\Cadastro\\TpPagto"
  Moveto [Codigo_Avanco]
  Locate AlinhM(StrVal([PDA_PEDC->FPG_PED]),4)
  If RetVal
     Then cfpg=[Tipo do Pagamento]
     Else cfpg=""
  EndIf

  Moveto "PedidoC"
  [Forma de Pagamento       ]=cfpg

  Switch
    Case [PDA_PEDC->Tp_ped]="1" : [Codigo da Destinacao     ]="001"
    Case [PDA_PEDC->Tp_ped]="2" : [Codigo da Destinacao     ]="033"
    Case [PDA_PEDC->Tp_ped]="3" : [Codigo da Destinacao     ]="026"
    Case [PDA_PEDC->Tp_ped]="4" : [Codigo da Destinacao     ]="044"
    OtherWise                   : [Codigo da Destinacao     ]="001"
  EndSwitch
  Checa_UF_Destinacao()
  [Codigo da Transportadora ]="0001"
  [Frete por Conta          ]="1"
  [Taxa de Desconto         ]=[PDA_PEDC->Desc_ped]

  [Observacao do Pedido     ]=[PDA_PEDC->Obs_ped]+obsimp
  [Situacao do Pedido       ]="ABERTO"
  [Codigo da Tabela         ]=[PDA_PEDC->Tbpr_ped]
  [Sistema Gerador          ]="PM"
  [Numero_Carregamento      ]=VSDGNCARREG

  [Numero Pedido Origem     ]=PEDORIG
  [Codigo do Veiculo        ]=CODVEICULO
  Controle_Dia()

  UnLockRecord

  Seq=0
  Moveto "PDA_PEDI"
  Moveto [NUMPED_ITM]
  Locate [PDA_PEDC->NUM_PED]
  While [NUMPED_ITM]=[PDA_PEDC->NUM_PED]
    Moveto "PedidoI"
    End
    Down

    Seq=Seq+1
    [Numero do Pedido     ]=NPED
    [Item do Pedido       ]=Seq
    [Codigo do Item       ]=AlinhM(StrVal([PDA_PEDI->Proped_itm ]),10)
    [Quantidade           ]=[PDA_PEDI->Qtdped_itm]
    [Preco Unitario       ]=[PDA_PEDI->VrVend_itm]
    [Preco Unitario Tabela]=[PDA_PEDI->Vunped_itm]
    [Codigo da Tabela     ]=[PedidoC->Codigo da Tabela]

    [Preco Total             ]=Round([Quantidade]*([Preco Unitario]-[Valor Desconto Unitario]),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
            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
    
    [Valor do IPI ]=Round(([Preco Total]*[Aliquota de IPI ])/100,2)
    UnLockRecord

    Moveto "PDA_PEDI"
    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile

  Calc_Imposto()
  UnLockRecord

  Moveto  "PedidoV"
  Calc_Venctos()

  Moveto "PDA_PEDC"
EndScan
Do_It!
ClearAll

EndProc   ; (Seleciona)

;*******************************************************************************
;* Rotina Converte DB                                                          *
;*******************************************************************************
Proc Syncroniza(Tp)
ClearAll
VSDGPASTA="C:\\SEPDA\\"
Tipo_Ext =".DBF"

For i from 1 to 3
  Switch
    Case i=1:
         ARQPDOX="PDA_PEDC"
         ARQ    ="PDC"+AlinhM(VSDGREPRESEN,5)
    Case i=2:
         ARQPDOX="PDA_PEDI"
         ARQ    ="PDI"+AlinhM(VSDGREPRESEN,5)
    Case i=3:
         ARQPDOX="PDA_CLIE"
         ARQ    ="CLI"+AlinhM(VSDGREPRESEN,5)
  EndSwitch

  ARQ=VSDGPASTA+ARQ+Tipo_Ext
  If Not IsFile(ARQ)
     Then Mensagem("N„o encontrado arquivo -> "+ARQ)
          Loop
  EndIf

  Barra(3, i)
  Aguarde(Tp+"ndo "+ARQ+" ->DB "+BARRA_STRING)

  Switch
    Case Tp="Importa":
         {Tools} {ExportImport} {Import} {dBASE}
         TypeIN ARQ Enter
         TypeIn ARQPDOX Enter {Replace}
         ClearAll

         If i=2
            Then Sort "PDA_PEDI" On "Numped_itm", "Nompro_itm"
         EndIf
    Case Tp="Deleta":
         Then Deleta_Arquivo(ARQIMP)
  EndSwitch

EndFor

EndProc

;*******************************************************************************
;*** Checagem UF/Destinacao
;*******************************************************************************
Proc Checa_UF_Destinacao()

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

;*** Aliquota/Tributacao/Observacao da Destinacao ***
If CHAVEC=1
   Then OBS=[Observacao na Nota Fiscal]
   Else OBS=""
EndIf
TRIB_ICMS=""

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]

EndIf
KeyPress "ESC"
[Observacao na Nota Fiscal]=OBS

EndProc

;*******************************************************************************
;*** Calcula Impostos
;*******************************************************************************
Proc Calc_Imposto()

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

VRMERC=0
Moveto "PedidoI"
Moveto [Numero do Pedido]
Locate NPED
While [Numero do Pedido]=NPED

  If [Tributacao de ICMS]="D" And [Aliquota de ICMS]>0
     Then For I From 1 To 10
              If Not IsBlank(AICMS[I])
                 Then If AICMS[I]=[Aliquota de ICMS] And RICMS[I]=[Aliquota Reduzida BCICMS]
                         Then BCICMS[I]=BCICMS[I]+[Preco Total]
                              VIICMS[I]=VIICMS[I]+[Valor do ICMS]
                              QuitLoop
                      EndIf
                 Else AICMS[I] =[Aliquota de ICMS]
                      RICMS[I] =[Aliquota Reduzida BCICMS]
                      BCICMS[I]=[Preco Total]
                      VIICMS[I]=VIICMS[I]+[Valor do ICMS]
                      QuitLoop
              EndIf
          EndFor
  EndIf

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

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

  Skip
  If EOT() Then QuitLoop EndIf
EndWhile
Moveto "PedidoC"
CALC_PEDIDO()
CALC_VOLUMES()

EndProc ;(Calc_Imposto)

;*******************************************************************************
;* Rotina para Calculo de Vencimentos                                          *
;*******************************************************************************
Proc CALC_VENCTOS()
If Not Checa_CompDias([PedidoC->Composicao de Dias])
   Then Return
EndIf

PARAM_COMIS_VENCTO="S"

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]

  i=i+1
EndWhile

Moveto "PedidoC"

EndProc

;*******************************************************************************
;* Rotina para Checagem de Composicao de Dias                                  *
;*******************************************************************************
Proc Checa_CompDias(Texto)
Private Texto,Contador_Repeticao
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 Calculo de Valores do Pedido                                    *
;*******************************************************************************
Proc CALC_PEDIDO()
[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 VBC=BCICMS[I]-Round((BCICMS[I]*TXDESCTO_TOTAL)/100,2)
                    VBC=VBC-Round((VBC*RICMS[I])/100,2)
                    VRBCICMS=VRBCICMS+VBC
                    VRICMS=VRICMS+Round((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

[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

EndProc

;*******************************************************************************
;* Rotina para Localizar Enderecos                                             *
;*******************************************************************************
Proc Enderecos()

CODIGO_OK=False
Moveto [Codigo_Entrega_Cobranca]
Ativa_Lookup()
Moveto [Codigo]
Locate [PedidoC->Codigo]
If RetVal
   Then CODIGO_OK=True
EndIf
KeyPress "ESC"

If CODIGO_OK
   Then [Codigo_Entrega_Cobranca]=[Codigo]
EndIf
If IsBlank([Endereco de Entrega])
   Then [Endereco de Entrega]="O MESMO"
EndIf
If IsBlank([Endereco de Cobranca])
   Then [Endereco de Cobranca]="O MESMO"
EndIf
EndProc   ;  (EnderecoS)

;*******************************************************************************
;* Rotina para Calculos de Caracteristicas de Volumes                          *
;*******************************************************************************
Proc CALC_VOLUMES()

NVOL   =0
PESOL  =0
PESOB  =0
DMARCA =""
NMARCA =0
DUNID  =""
NUNID  =0

Moveto "PedidoI"
Moveto [Numero do Pedido]
Locate NPED
While [Numero do Pedido]=NPED
  GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM
  If Not RetVal
     Then Loop
     Else AUX_MAR = REG_ITEM["Descricao da Marca"]
          AUX_UND = REG_ITEM["Descricao da Unidade"]
  EndIf
  If DMARCA<>AUX_MAR
     Then DMARCA=AUX_MAR
          NMARCA=NMARCA+1
  EndIf
  If DUNID <>AUX_UND
     Then DUNID =AUX_UND
          NUNID =NUNID+1
  EndIf
  NVOL =NVOL +NDecimal(([Quantidade]*[Volumes]),2)
  PESOL=PESOL+NDecimal(([Quantidade]*[Peso Liquido]),2)
  PESOB=PESOB+NDecimal(([Quantidade]*[Peso Embalagem]),2)

  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

Moveto "PedidoC"
If (PESOB+PESOL)>0
   Then [Peso Bruto  ]=PESOB+PESOL
   Else [Peso Bruto  ]=BlankNum()
EndIf
If PESOL>0
   Then [Peso Liquido]=PESOL
   Else [Peso Liquido]=BlankNum()
EndIf
If NVOL>0
   Then [Numero de Volumes]=NVOL
   Else [Numero de Volumes]=BlankNum()
EndIf
If NMARCA>1
   Then [Marca dos Volumes]="DIVERSAS"
   Else [Marca dos Volumes]=DMARCA
EndIf
If NUNID>1
   Then [Especie de Volumes]="VOLUME(S)"
   Else [Especie de Volumes]=DUNID
EndIf
Endproc

;*******************************************************************************
;* 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"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_REPRESEN"      : Campo="TG_EMPRESA"
            Case Campo="TG_NCARREG"       : Campo="TG_REPRESEN"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     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"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"  : Campo="TG_REPRESEN"
                    Case Campo="TG_REPRESEN" : Campo="TG_NCARREG"
                    Case Campo="TG_NCARREG"  : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="":
     MSG_CAMPO=""
  Case Campo="TG_EMPRESA":
     MSG_CAMPO="Informe uma empresa"
  Case Campo="TG_REPRESEN":
     MSG_CAMPO="Informe um representante"
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

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

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""    EndIf
LimpAguarde()

Array AICMS[10]
Array AIPI[10]

Array VIICMS[10]
Array VIIPI[10]

Array BCICMS[10]
Array BCIPI[10]

Array RICMS[10]
Array RIPI[10]

VSDGEMPRESA =""
VSDGREPRESEN=""
VSDGNCARREG =""

While True

  ShowDialog "Importa‡„o PDA - Sistemas Edmar" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 11 Width 56

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

    Label  @ 02,00 "Representante"  For "TG_REPRESEN"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_REPRESEN"   To VSDGREPRESEN
    Accept @ 03,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMREPR"    To VSDGNOMREPR

    Label  @ 04,00 "Carregamento" For "TG_NCARREG"
    Accept @ 05,01 Width 9  "A6"  Picture "[&,#][#*#]" Tag "TG_NCARREG"    To VSDGNCARREG
    Accept @ 05,11 Width 23 "A20" Picture "!*!" Tag "TG_NOMNCARREG" To VSDGNOMNCARREG

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Informe uma Empresa !")
          Loop
  EndIf
  If IsBlank(VSDGREPRESEN)
     Then Mensagem("Informe um Representante !")
          Loop
  EndIf

  NCarregOk=True
  View "AcCarrgC"
  Moveto [Numero_Carregamento]
  Locate VSDGNCARREG
  If Not RetVal
     Then NCarregOk=False
          Mensagem("Carregamento inv lido !")
     Else CODVEICULO=[Codigo do Veiculo]
          If IsBlank(CODVEICULO)
             Then NCarregOk=False
                  Mensagem("Veiculo n„o informado no Carregamento ")
          EndIf
  EndIf
  ClearAll
  If Not NCarregOk Then Loop EndIf

  Empty("PDA_PEDC")
  Empty("PDA_PEDI")

  Syncroniza("Importa")
  If IsEmpty("PDA_PEDC")
     Then MENSAGEM("N„o existem pedidos a processar")
          Loop
  EndIf
  If IsEmpty("PDA_PEDI")
     Then MENSAGEM("N„o existem itens de pedido a processar")
          Loop
  EndIf

  AGUARDE("Aguarde, Gravando pedidos")
  Importa()

  If NregPed=0
     Then MSG="N„o existem Pedidos no arquivo !// //"
     Else MSG="Resumo do Pedidos:// //"
          MSG=MSG+Format("W5,EIC",NregPed)+" Registros       //"
          MSG=MSG+Format("W5,EIC",LidoPed)+" Lidos           //"
          MSG=MSG+Format("W5,EIC",SyncPed)+" j  Sincronizados//"
          MSG=MSG+Format("W5,EIC",ImpoPed)+" Importados      // //"
  EndIf
  MSG=MSG+"Se por algum motivo precisar repetir este processo//"
  MSG=MSG+"para este Vendedor, efetue o sincronismo novamente !"
  Mensagem(MSG)
  Syncroniza("Deleta")

EndWhile
ClearAll
Release Vars All
Release Procs All

