Code: Select all
// Monta o Cabeçalho dos Horarios
a_Mapa[ 1] := { '07:00', '07:30', '08:00', '08:30', '09:00', '09:30', '10:00', '10:30',;
'11:00', '11:30', '12:00', '12:30', '13:00', '13:30', '14:00', '14:30',;
'15:00', '15:30', '16:00', '16:30', '17:00', '17:30', '18:00', '18:30',;
'19:00', '19:30', '20:00', '20:30', '21:00', '21:30', '22:00', '22:30' }
a_Cor[ 1] := {}
// Inicializa o Restante dos ARRAYs
For X := 2 to 32
a_Mapa[ X] := Array(32)
a_Cor[ X] := Array(32)
Next
//monta o listbox dos horarios do mapa
//--------------------------------------------------------------------------
// Mostra o Cabeçalho das Horas da Agenda - lado Esquerdo
TWBrowse():lHScroll := .f.
REDEFINE LISTBOX oBrw[ 1];
FIELDS a_Mapa[ 1][ n] ID 70 OF oMap30
oBrw[ 1]:SetArray( a_Mapa[ 1] )
oBrw[ 1]:bGotop := { || n := 1 }
oBrw[ 1]:bGoBottom := { || n := Eval( oBrw[ 1]:bLogicLen ) }
oBrw[ 1]:bSkip := { | nwant, nold | nold := n , n += nwant, n := Max( 1, Min( n, Eval( oBrw[ 1]:bLogicLen ))), n - nOld }
oBrw[ 1]:bLogicLen := { || Len( a_Mapa[ 1] ) }
// Força o browse a trabalhar com celulas
oBrw[ 1]:lCellStyle := .t.
oBrw[ 1]:nLineStyle := 4
oBrw[ 1]:lDrawHeaders := .f.
// Cor da Linha
oBrw[ 1]:nClrText := { || CLR_BLACK }
// Cor de fundo da planilha
oBrw[ 1]:nClrPane := { || nRGB( 209, 209, 209 ) }
oBrw[ 1]:lDrawSelect := .f.
oBrw[ 1]:Refresh()
//--------------------------------------------------------------------------
// Mostra o Mapa 1
// Esta montagem é exatamente igual para os mapas
// 1 a 17, o mapa 18 mostra os horarios do lado direito.
TWBrowse():lHScroll := .f.
REDEFINE LISTBOX oBrw[ 2];
FIELDS a_Mapa[ 2][ n] ID 71 OF oMap30
oBrw[ 2]:SetArray( a_Mapa[ 2] )
oBrw[ 2]:bGotop := { || n := 1 }
oBrw[ 2]:bGoBottom := { || n := Eval( oBrw[ 2]:bLogicLen ) }
oBrw[ 2]:bSkip := { | nwant, nold | nold := n , n += nwant, n := Max( 1, Min( n, Eval( oBrw[ 2]:bLogicLen ))), n - nOld }
oBrw[ 2]:bLogicLen := { || Len( a_Mapa[ 2] ) }
// Força o browse a trabalhar com celulas
oBrw[ 2]:lCellStyle := .t.
oBrw[ 2]:nLineStyle := 4
oBrw[ 2]:lDrawHeaders := .f.
// Cor da Linha
oBrw[ 2]:nClrText := { || CLR_WHITE }
// Cor de fundo da planilha
oBrw[ 2]:nClrPane := { || IF( a_Mapa[ 2][ n] = 'BLOQ', CLR_HRED,;
IF( Substr( a_Cor[ 2][ n], 20, 1 ) = '*', nRgb( 0, 193, 0 ),;
IF( Substr( a_Cor[ 2][ n], 20, 1 ) = '+', nRgb( 255, 0, 0 ), aBrush_[TCOR[ 1]] ))) }
oBrw[ 2]:bLDblClick := { | nRow, nCol | pPR_A_COD := TMP[ 1],;
bPos := 1, cPos := n,;
TESTE2( oWnd, oAgen, oMap30, pPR_A_COD, oBtn_, .t. ) }
/*
Obs.: bPos equivale ao button do profissional
cPos equivale a coluna onde se deu o click do mouse
necessários pra que possa ser feito RETORNO CORRETAMENTE.
*/
// Tooltip do conteudo da Celula, funcionalidade futura(18.10.2007 by lAugusto)
oBrw[ 2]:cTooltip := "Duplo Clique para Selecionar " + CRLF + " Horario/Profissional."
//oBrw[ 2]:bChange := { || oBrw[ 2]:cToolTip := a_Mapa[ 2][ oBrw[ 2]:nAt ] }
oBrw[ 2]:lDrawSelect := .f.
oBrw[ 2]:Refresh()
oBrw[ 2]:nDlgCode := DLGC_WANTALLKEYS
//SysRefresh()
//--------------------------------------------------------------------------
// Montagem dos Buttons dos profissionais, de 1 a 18
REDEFINE SBUTTON oBtn[ 1] ID 635 OF oMap30;
PROMPT aCbc[ 1];
ACTION( pPR_A_COD := TMP[ 1], bPos := oMap30:oCtlFocus:nId,;
TESTE2( oWnd, oAgen, oMap30, pPR_A_COD, oBtn_ ) ) CANCEL;
COLORS { |oB| IF( oB:lMouseOver,CLR_WHITE, CLR_BLACK )},;
{ |oB| IF( oB:lMouseOver,{ CLR_WHITE, CLR_BLUE },;
{ CLR_HGRAY, CLR_HGRAY } ) };
BORDER TEXT POSITION ON_CENTER
oBtn[ 1]:lCancel := .t.
oBtn[ 1]:bKeyDown := { |nKey|;
IF( nKey = VK_ESCAPE,( Ver_Tecla1( oAgen ) ),;
IF( nKey = VK_LEFT,( Anterior( 1 ) ),;
IF( nKey = VK_RIGHT,( Proximo( 1 ) ), nil ))) }
oBtn[ 1]:nDlgCode := DLGC_WANTALLKEYS
//-----------------------------------------------------------------
//------------ CLICK NO HBUTTON ------------------------------------------------------------
Function TESTE2( oWnd, oAgen, oMap30, pPR_A_COD, oBtn_, lEdita )
local oFont
DEFAULT lEdita := .f. // Quando TRUE, clicou diretamente na Célula.
pPR_A_COD := Substr( PPR_A_COD, 1, 2 ) + ( Strzero( Val( Substr( pPR_A_COD, 3, 3 ) ), 3 ) )
oPR_A_COD:Refresh()
dbSelectArea( "Pro_A01" ) // sele 7
dbSetOrder( 'IPro_A01' ) // set order to 1
dbGotop()
dbSeek( pPR_A_COD )
IF EOF()
tone( 2000, 3 )
msginfo( 'O código selecionado não consta do cadastro de profissionais.', 'Atenção Operador' )
xSetFocus( oBtn[bPos] )
Return nil
EndIF
oMap30:Hide()
oAgen:Show()
//oAgen:Enable()
//oAgen:SetFocus()
pPR_A_NOM := Pro_A01->PR_A_NOM
oPR_A_NOM:Refresh()
dbSelectArea( "Pro_C01" ) // Sele 11
dbSetOrder( 'IPRO_C01' )
dbSeek( pPR_A_COD )
TFOLGAT := Pro_C01->PR_C_FOLG
pPR_C_FUN := Pro_C01->PR_C_FUN
pPR_C_HENT := Pro_C01->PR_C_HENT
oPR_C_FUN:Refresh()
oPR_C_HENT:Refresh()
// pAG_DATA := m->tDATA by lAugusto 12/09/2007
DIA_SEMANA( oAgen )
oAgen:aControls[ 5]:Refresh() // oAG_DATA:Refresh()
oAgen:aControls[ 6]:SetText( tDIA_SEM ) // oDIA_SEM:Refresh()
// Vai para AGENDA
HORARIO( oAgen, oBtn_ ) // Rotina no AG_002.PRG
// Mostra Botoes Extras de Navegacao do Calendario
oBtn_[ 3]:Show()
oBtn_[ 4]:Show()
oBtn_[ 5]:Show()
oBtn_[ 6]:Show()
DIA( oAgen, lEdita, cpos ) // Rotina no AG_002.PRG
Return nil
//-------------------------------------------------------------------
Function Ver_Tecla1( oAgen )
local X
tMapa := .t. // Se TRUE, esta na MAPA.
tAgen := .f. // Se TRUE, esta na AGENDA.
lProc := .f.
lSai := .f. // SE FALSE, habilita buttons de funções e coloca o FOCO na data no MAPA
// destrava Buttons de Movimentação do MAPA
For X := 22 to 33
oBtn[ X]:Enable()
oBtn[ X]:Refresh()
Next
// desabilita botoes de escolha do profissional( 1 a 17, inclusive. )
For X := 1 to 17
oBtn[ X]:Refresh()
oBtn[ X]:Disable()
Next
oAG_DATA:Enable()
oAG_DATA:Refresh()
SET DATE FRENCH
DIA_SEMM( )
// Se AGENDA de 30min
IF _TPA = 'N3'
MOSTRAM1( oAgen )
Else // Se AGENDA de 20min
//
EndIF
xSetFocus( oAG_DATA )
Return nil
//----------------------------------------------------------------------
Function DIA_SEMM( )
DO CASE
Case dow( pAG_DATA ) = 1
tDIA_SEM := 'Domingo'
Case dow( pAG_DATA ) = 2
tDIA_SEM := 'Segunda'
Case dow( pAG_DATA ) = 3
tDIA_SEM := 'Terça '
Case dow( pAG_DATA ) = 4
tDIA_SEM := 'Quarta '
Case dow( pAG_DATA ) = 5
tDIA_SEM := 'Quinta '
case dow( pAG_DATA ) = 6
tDIA_SEM := '_ '
Case dow( pAG_DATA ) = 7
tDIA_SEM := 'Sábado '
ENDCASE
oDIA_SEM:Refresh()
Return nil
//-----------------------------------------------------------------------
Function MOSTRAM1( oAgen )
local I, X, Z, nInd := 2, n
TC := 7
FOR I = 1 TO 17
DO CASE
Case i = 1
pPR_A_COD = TMP[ 1]
Case i = 2
pPR_A_COD = TMP[ 2]
...
...
...
Case i = 17
pPR_A_COD = TMP[17]
ENDCASE
dbSelectArea( "Ag_Pri" ) // sele 8
dbSetOrder( "IAg_002" ) // set order to 2
dbSeek( pPR_A_COD + Dtos( pAG_DATA ) )
//----------------------------------------------------------------------
// Limpa _ do ARRAY do Listbox dos Mapas - 2 a 17
IF Len( a_Mapa[nInd] ) > 0
Z := Len( a_Mapa[nInd] )
oBrw[nInd]:bGotop := { || n := 1 }
For X := 1 To Z
Adel( a_Mapa[nInd][ oBrw[nInd]:nAt ] )
ASize( a_Mapa[nInd], Len( a_Mapa[nInd] ) - 1 )
Next
// Inicializa o Restante dos ARRAYs
a_Mapa[nInd] := Array(32)
EndIF
// Preenche o Array Mapas com os dados da AGENDA do Profissional
a_Mapa[nInd][ 1] := AG_0700A
a_Mapa[nInd][ 2] := AG_0730A
...
...
...
a_Mapa[nInd][30] := AG_0930P
a_Mapa[nInd][31] := AG_1000P
a_Mapa[nInd][32] := AG_1030P
//- Verifica se Substr( a_Cor[nInd][ n], 20, 1 ) = '*', SE SIM, pinta a celula de verde limão
a_Cor[nInd][ 1] := AG_0700AT
a_Cor[nInd][ 2] := AG_0730AT
...
...
...
a_Cor[nInd][31] := AG_1000PT
a_Cor[nInd][32] := AG_1030PT
//----------------------------
dbSelectArea( "Bloqueio" ) // sele 25
SET FILTER TO Bloqueio->BL_SEM = Dow( pAG_DATA )
dbSeek( pPR_A_COD )
IF !Bloqueio->( EOF() )
While pPR_A_COD = BL_COD
X := BL_HOR
a_Mapa[nInd][ X] := 'BLOQ'
dbSkip()
Enddo
EndIF
SET FILTER TO
oBrw[nInd]:bGotop := { || n := 1 }
oBrw[nInd]:Refresh()
dbSelectArea( "Ag_Pri" ) // sele 8
nInd += 1
Next
Return nil