Árvore de páginas

Ponto de Entrada

Descrição:

Este Ponto de Entrada esta localizado na rotina Orçamento por Fases(OFIXA011). Tem como objetivo disponibilizar ao usuário uma validação personalizada nas opções da rotina Orçamento Por Fases.

Permite ao usuário validar a continuidade da operação selecionada.

Localização:

Atualizações \ Mov Oficina \ Orçamento por Fases

Eventos:

Function OXA011(cAlias,nReg,nOpc)
Local lRet := .f.
Local lVS1NUMLIS := .f.
Local lProbDes := .f.
Local lNewRes   := GetNewPar("MV_MIL0181",.f.) // Controla nova reserva no ambiente?
Local lMovDiverg:= GetNewPar("MV_MIL0037","S") == "S" // Movimenta em divergencia de estoque? (S/N)
Local aBkpRot   := {}



Private lRejLib  := .f.

If FindFunction("OA4820295_ValidaAtivacaoReservaRastreavel")
    If !OA4820295_ValidaAtivacaoReservaRastreavel()
        Return .f.
    EndIf
EndIf

// regras de permissao
if nOpc == 6 // FATURAR                                                     // Faturar orcamento:
   
    if VS1->VS1_TIPORC == "1" .AND. VS1->VS1_STATUS $ "F/G" .AND. !Empty(VS1->VS1_NUMNFI)
        dbSelectArea("SF2")
        dbSetOrder(1)
        if dbSeek(xFilial("SF2")+VS1->VS1_NUMNFI+VS1->VS1_SERNFI)
            If MsgYesNo(STR0073+ VS1->VS1_NUMNFI+"/"+VS1->VS1_SERNFI+". "+STR0074)  
                dbSelectArea("VS1")
                Reclock("VS1",.f.)
                VS1->VS1_STATUS := "X"
                MsUnlock()
                If ExistFunc("OA3700011_Grava_DTHR_Status_Orcamento")
                    OA3700011_Grava_DTHR_Status_Orcamento( VS1->VS1_NUMORC , VS1->VS1_STATUS , STR0108 ) // Grava Data/Hora na Mudança de Status do Orçamento / Orçamento por Fases
                EndIf
                return .f.
            Else
                return .f.
            Endif  
        Else
            MsgInfo(STR0073+ VS1->VS1_NUMNFI+"/"+VS1->VS1_SERNFI+". "+STR0075,STR0037)
            return .f.
        Endif  
    Endif
   
    if VS1->VS1_STATUS == "X" .or. VS1->VS1_STATUS == "C" .or. VS1->VS1_STATUS == "I"       //      Sempre, a menos que esteja cancelado ou ja faturado
        MsgInfo(STR0020,STR0018)
        return .f.
    endif
   
    lVS1NUMLIS := VS1->(FieldPos("VS1_NUMLIS")) > 0
   
    if !Empty(VS1->VS1_NUMLIB)
        dbSelectArea("VS6")
        dbSetOrder(1)
        dbSeek(xFilial("VS6")+VS1->VS1_NUMLIB)
        If Empty(VS6->VS6_DATAUT) // OI001ATU(cNumOrc,cFaseAtu)
            If VS6->(FieldPos("VS6_DATREJ")) > 0
                If !Empty(VS6->VS6_DATREJ)
                    MsgInfo(STR0092+VS6->VS6_MOTREJ+" - "+POSICIONE("VS0",1,xFilial("VS0")+"000016"+VS6->VS6_MOTREJ,"VS0_DESMOT") +". "+Chr(13) + Chr(10) +STR0093+ IIF( (GetNewPar("MV_GLIBVEN","N") == "S") .AND. lVS1NUMLIS , Chr(13) + Chr(10) + Chr(13) + Chr(10) + STR0031 , "" ) ,STR0018)
                    lRejLib  := .t.
                    OXI001REVF(VS1->VS1_NUMORC,"0")
                    lProbDes := .t.
                Else
                    MsgInfo(STR0021 + IIF( (GetNewPar("MV_GLIBVEN","N") == "S") .AND. lVS1NUMLIS , Chr(13) + Chr(10) + Chr(13) + Chr(10) + STR0031 , "" ) ,STR0018)
                    lProbDes := .t.
                EndIf
            Else
                MsgInfo(STR0021 + IIF( (GetNewPar("MV_GLIBVEN","N") == "S") .AND. lVS1NUMLIS , Chr(13) + Chr(10) + Chr(13) + Chr(10) + STR0031 , "" ) ,STR0018)
                lProbDes := .t.
            EndIf
        Endif
    Endif
    If lVS1NUMLIS .and. !Empty(VS1->VS1_NUMLIS)
        dbSelectArea("VS6")
        dbSetOrder(1)
        dbSeek(xFilial("VS6")+VS1->VS1_NUMLIS)
        If Empty(VS6->VS6_DATAUT)
            If VS6->(FieldPos("VS6_DATREJ")) > 0
                If !Empty(VS6->VS6_DATREJ)
                    MsgInfo(STR0092+VS6->VS6_MOTREJ+" - "+POSICIONE("VS0",1,xFilial("VS0")+"000016"+VS6->VS6_MOTREJ,"VS0_DESMOT")+". "+Chr(13) + Chr(10) +STR0093+ Chr(13) + Chr(10) + Chr(13) + Chr(10) + STR0032 ,STR0018)
                    lRejLib  := .t.
                    OXI001REVF(VS1->VS1_NUMORC,"0")
                    lProbDes := .t.
                Else
                    MsgInfo(STR0021 + Chr(13) + Chr(10) + Chr(13) + Chr(10) + STR0032 ,STR0018)
                    lProbDes := .t.
                EndIf
            Else
                MsgInfo(STR0021 + Chr(13) + Chr(10) + Chr(13) + Chr(10) + STR0032 ,STR0018)
                lProbDes := .t.
            EndIf
        Endif
    EndIf
    If lProbDes
        Return .f.
    EndIf
    DBSelectArea("VAI")
    DBSetOrder(4)
    DBSeek(xFilial("VAI")+__cUserId)
    If VS1->VS1_TIPORC == "2" .and. VAI->(FieldPos("VAI_EXPOOS")) > 0
        if VAI->VAI_EXPOOS == "0"
           MsgInfo(STR0077,STR0018)
           return .f.
       endif
    Else
        if VAI->VAI_FATBAL == "0"
           MsgInfo(STR0022,STR0018)
           return .f.
       endif
    Endif
endif
if !VS1->VS1_STARES $ "1.2" // Orçamento nao reservado
    if VS1->VS1_DATVAL < ddatabase  .and. nOpc <> 2 .and. nOpc <> 3 .and. nOpc <> 5
        MsgInfo(STR0017,STR0018)
        return .f.
    endif
Endif
if nOpc == 4                            // Alterar orcamento:
    if VS1->VS1_STATUS != "0"       //  Somente quando estiver apenas digitado
        MsgInfo(STR0019,STR0018)
        return .f.
    endif
endif
if nOpc == 5 // CANCELAR
    if  VS1->VS1_STATUS == "X"  .or. VS1->VS1_STATUS == "C" .or. VS1->VS1_STATUS == "I" //      Sempre, a menos que esteja cancelado ou ja faturado
        MsgInfo(STR0023,STR0018)
        return .f.
    endif
    If ( VAI->(ColumnPos("VAI_CANCPR")) > 0 ) // Campo de Permissao do Usuario para Cancelar/Deletar Pecas ja Reservadas?
        If VS1->VS1_STARES $ "12" .or. FM_SQL("SELECT SUM(VS3_QTDRES) FROM " + retsqlname('VS3') + " WHERE VS3_FILIAL='"+xFilial('VS3')+"' AND VS3_NUMORC='"+VS1->VS1_NUMORC+"' AND D_E_L_E_T_=' '") > 0
            //Verificar se o usuario pode cancelar/deletar uma Peca ja Reservada
            VAI->(DbSetOrder(4))
            VAI->(DbSeek( xFilial("VAI") + __CUSERID ))
            If VAI->VAI_CANCPR == '0' // Sem permissão para Cancelar
                MsgStop(STR0104,STR0018) // Usuário sem permissão para Cancelar Orçamento com Peças já Reservadas. Impossivel continuar. / Atencao
                return .f.
            EndIf
        EndIf
    EndIf
endif
//
if nOpc == 6
    DBSelectArea("VS1")
    if !Empty(VS1->VS1_NUMAGE) .and. VS1->VS1_VTOTNF == 0
        MsgInfo(STR0033,STR0034)
        return .f.
    endif

    IF lNewRes .and. lMovDiverg .and. VS1->VS1_STATUS == "5"
        If MsgYesNo("Este orçamento teve divergência na conferência dos itens e o mesmo já foi atualizado, deseja visualizar?")
            aBkpRot := aClone(aRotina)
            aRotina := {}
            OFIC131(VS1->VS1_NUMORC)
            aRotina := aClone(aBkpRot)
        EndIf
    EndIf

    IF lNewRes .and. VS1->VS1_STATUS == "A"
        OXA0110035_ValidaSolicitacaoTransferencia()
    EndIf

endif
if nOpc == 4 .or. nOpc == 6  .or. nOpc == 5
    DBSelectArea("VS1")
    if !Softlock("VS1")
        return .f.
    endif
endif
//
if ExistBlock("OA011APRO")
    if !ExecBlock("OA011APRO",.f.,.f.,{nOpc})
        MsUnlockAll()
        Return(.f.)
    Endif
Endif
//
lRet = OFIXX001(NIL,NIL,NIL,nOpc)
//
MsUnlockAll()
//
SA1->(MsUnlock()) // Nao remover, pois quando integrado com o Venda Direta o registro permanecia bloqueado
//
If ExistBlock("OA011FIM") // Ponto de Entrada no Final da chamada de Menu do Orçamento fases
    ExecBlock("OA011FIM",.f.,.f.)
EndIf
//
VS1->(dbSetOrder(1))
//
Return .t.

Programa Fonte:

OFIXA011.PRW

Função:

OXA011()

Parâmetros:
NomeTipoDescrição

nOpc

Numérico

Numero da opção selecionada. Ex: 4=Alterar; 5=Cancelar; 6=Faturar.

Retorno:
NomeTipoDescrição

lRet

Lógico

Retorna Verdadeiro (.t.) ou Falso (.f.)

Exemplo:

Include totvs.ch

#INCLUDE "PROTHEUS.CH"


/*

ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±

±±³Funcao ³ OA011APRO ³ Autor ³Mil Totvs DMS ³ Data ³ 16/10/23 ³±±

±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±

±±³Descricao ³ Valida visualização da tela do Orçamento ³±±

±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±

±±³Uso ³ Auto Peças/Oficina ³±±

±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±

±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

*/


User Function OA011APRO()


Local nOpc := PARAMIXB[1]

Local lRet := .f.


MsgInfo("O ponto de entrada OA011APRO foi executado com sucesso!","")


Return lRet