Páginas filhas
  • FWCalendarWidget

Descrição

Permite a criação de um componente de calendário.

O componente não faz o controle dos dados. Apenas exibe as informações que forem solicitadas e executa blocos de código para a chamada das operações. 

Todo controle de dados, operações de inclusão, exclusão, alteração e consulta, devem ser desenvolvidas pelo utilizador do componente.

Dessa forma não há nenhum tipo de restrição quanto a estrutura dos dados, controles, e regras de negócio.

Em linhas gerais, o componente recebe os dados a serem exibidos na forma de um array de objetos do tipo FWCalendarActivity e executa blocos de código para as operações de inclusão, edição, exclusão e consulta.

Atualmente o widget de calendário está disponível apenas no formato Diário. Ainda não possuímos os formatos Mensal e Semanal.

 

Este componente está disponível apenas no Protheus 12

 

New

Sintaxe

FWCalendarWidget():New(<oOwner >)-> NIL

Descrição

Metodo para instanciar a classe

Parâmetros

Nome

Tipo

Descrição

Default

Obrigatório

Referência

oOwner:

Objeto

Define o owner para a criação do calendário

   

 


Activate

Sintaxe

FWCalendarWidget():Activate()-> NIL

Descrição

Ativa o objeto de acordo com o tipo (Atualmente o único tipo de visualização é o Diário. Os tipos Mensal e Semanal ainda não estão disponíveis).



DeActivate

Sintaxe

FWCalendarWidget():DeActivate()->Nil

Descrição

Desativa o objeto


SetbRefresh

Sintaxe

FWCalendarWidget():SetbRefresh(bRefresh)-> NIL

Descrição

Define o bloco de consulta dos dados. 

Este bloco é executado na abertura do widget e ao selecionar um dia para exibir.

O bloco irá receber a data selecionada e deverá retornar um array de objetos FWCalendarActivity com os dados a serem exibidos. 

Os dados retornados são exibidos no componente de calendário.

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Exemplo

 

bRefresh

bloco de código

Bloco para busca dos dados a serem exibidos. O bloco deve retornar um array com objetos FWCalendarActivity

X

{|dDate| BuscaAtividades(dDate) }

 

      

 

SetbNewActivity

Sintaxe

FWCalendarWidget():SetbNewActivity(bNewActivity)-> NIL

Descrição

Define o bloco a ser executado para incluir um agendamento. O bloco é disparado no clique do botão "+ Criar Atividade" ou na inclusão ao clicar em algum horário do componente.

O bloco irá receber a data, hora inicial e hora final selecionada para criação da atividade.

Quando disparado pela seleção de horário do componente o bloco recebe a hora inicial e final. Se disparado pelo botão Criar Atividade, o bloco recebe apenas a data.

Ao retornar da execução, é disparado o bloco de refresh para atualizar os dados da visualização do calendário.

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Exemplo

 

bNewActivity

bloco de código

Bloco para inclusão de atividades

X

{|dDate,cTimeIni,cTimeFin| NewTask(dDate,cTimeIni,cTimeFin) }

 

 

SetbClickActivity

Sintaxe

FWCalendarWidget():SetbClickActivity(bSetClickActivity)-> NIL

Descrição

Define o bloco para edição do agendamento.

Este bloco é executado ao clicar para editar um agendamento.

 O bloco irá receber a data selecionada e deverá retornar um array de objetos FWCalendarActivity com os dados a serem exibidos

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Exemplo

 

bSetClickActivity

bloco de código

Bloco disparado para chamar a edição de um agendamento.

o bloco irá receber um objeto FWCalendarActivity do agendamento a ser editado

X

{|oItem| EditTask(oItem) }

 

 

SetbRightClick

Sintaxe

FWCalendarWidget():SetbRightClick(bRightClick)-> NIL

Descrição

Define o bloco de clique do botão direito.

Este bloco é usado para criação de um menu popup exibido ao clicar com o botão direito sobre uma área do calendário ou sobre um agendamento.

Quando o clique for feito em cima de uma agendamento, o bloco irá receber o objeto FWCalendarActivity do item selecionado.

Este bloco deverá retornar um array com os itens do menu a serem exibidos na seguinte estrutura:

[n,1] - título (string)

[n,2] - action (string)

Exemplo: {{'Evento qualquer', "Alert('Teste') " } , {'Segundo botão', "Alert('segundo botão') " } }

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Exemplo

 

bRefresh

bloco de código

Bloco para busca dos dados a serem exibidos. O bloco deve retornar um array com objetos FWCalendarActivity

X

{|oItem| RightClick(oItem) } 

 

 

SetFontColor

Sintaxe

FWCalendarWidget():SetFontColor(cHexColor)-> NIL

Descrição

Define a cor da fonte. Quando o método não é utilizado, o sistema aplica a cor #636363

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Exemplo

 

cHexColor

string

cor da fonte em hexadecimal

X

"#FF6600"

 

 

SetFontName

Sintaxe

FWCalendarWidget():SetFontName(cFontName)-> NIL

Descrição

Define a cor da fonte. Quando o método não é utilizado o sistema aplica a fonte ARIAL

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Exemplo

 

cFontName

string

nome da fonte

X

"Comic Sans MS"

 

 

 

Exemplo completo incluindo a criação de uma rotina MVC para controle e persistência dos dados.
Obs: no exemplo abaixo, apenas a function Calendario() demonstra como deve ser a criação do objeto FwCalendarWidget.
Todo restante do código é somente uma sugestão para exemplificar como pode ser feito o controle dos dados.

Para o exemplo abaixo foi utilizada a criação de uma tabela para fins de demonstração do controle de dados. Caso deseje executar exatamente o código de exemplo abaixo, devem ser criados no dicionário a estrutura das tabelas, campos e índices contidas no anexo abaixo. 

 

 

Exemplo
#Include 'Protheus.ch'
#Include 'FWMVCDef.ch'
#INCLUDE 'FWCALENDARWIDGET.CH'


Function Calendario()
	Local oCalend
	Local oPanelCal
	
	DEFINE MSDIALOG oDlg TITLE "Teste Calendario" FROM 000, 000  TO 800, 800 COLORS 0, 16777215 PIXEL
	
	
	oPanelCal := TPanel():New(000,000,"",oDlg,,,,,, 200 ,200)
	
	oCalend := FWCalendarWidget():New(oPanelCal)
	oCalend:SetbNewActivity( {|dDate,cTimeIni,cTimeFin| NewTask(dDate,cTimeIni,cTimeFin) } )
	oCalend:SetbClickActivity( {|oItem| EditTask(oItem) } )
	oCalend:SetbRefresh( {|dDate| BuscaAtividades(dDate) } )
	oCalend:SetbRightClick( {|oItem| RightClick(oItem) } )
	oCalend:SetFontColor("#FF6600") 
	oCalend:SetFontName("Comic Sans MS") 
		
	oCalend:Activate()
	ACTIVATE MSDIALOG oDlg CENTERED
return


 
//Função executada ao criar uma nova tarefa
//recebe a data selecionada e a hora (quando o usuário clicou em algum horario especifico)
Function NewTask(dDate, cTimeIni, cTimeFin)
	Local oModel := FWLoadModel( "MVC_CALEND" )
	oModel:SetOperation(MODEL_OPERATION_INSERT)
	oModel:Activate()
	oModel:SetValue('MASTER', 'ZZL_DTINI', dDate)
	oModel:SetValue('MASTER', 'ZZL_DTFIN', dDate)
	oModel:SetValue('MASTER', 'ZZL_HRINI', cTimeIni)
	oModel:SetValue('MASTER', 'ZZL_HRFIN', cTimeFin)
 
 	//abre view com alguns dados ja preenchidos acima
	FWExecView('Inclusão de atividade - Calendario','MVC_CALEND', MODEL_OPERATION_INSERT, , { || .T. } , , 50,,,,,oModel)
Return .T.

//Funcao chamada ao dar um duplo click sobre uma atividade. 
//Recebe o item q o usuário clicou
Function EditTask(oItem)
	Local aArea 	:= GetArea()
	DbSelectArea('ZZL')
	DbSetOrder(1)
	If DbSeek(xFilial('ZZL') + oItem:cID)
		FWExecView("",'MVC_CALEND', MODEL_OPERATION_UPDATE,, { || .T. } , , 50 )
	EndIf
	RestArea(aArea)
Return .T.
Function ExcluirAtiv(cID)
	
	Local aArea 	:= GetArea()
	
	DbSelectArea('ZZL')
	DbSetOrder(1)
	If DbSeek(xFilial('ZZL') + cID)
		FWExecView("",'MVC_CALEND', MODEL_OPERATION_DELETE,, { || .T. } , , 50 )
	EndIf
	RestArea(aArea)
Return
//Funcao chamada ao clicar com o botao direito
Function RightClick(oItem)
	Local aMenu := {}
	Local cVarTeste := 'Texto qualquer'
	
	If oItem <> nil
	//-------------------------------------------------------
	// Quando clicou com o direito sobre algum agendamento
	//-------------------------------------------------------
		AADD(aMenu, {'Excluir', "ExcluirAtiv('" + oItem:cID + "')" } )
	Else
	//-------------------------------------------------------
	// Quando clicou com o direito sobre um horário livre
	//-------------------------------------------------------
		AADD(aMenu, {'Evento qualquer', "Alert('Teste') " } )
		AADD(aMenu, {'Outra ação', "Alert('" + cVarTeste + "') " } )
		
	EndIf
	
Return aMenu
//Funcao chamada para atualizar os dados do calendario
//Essa funcao recebe uma data e deverá retornar um array de objetos do tipo  FWCalendarActivity() 
//com as atividades que devem ser exibidas no calendario
Function BuscaAtividades(dDate)
	Local aArea 	:= GetArea()
	Local aItems 	:= {}
	Local oItem		:= nil
	Local aPrior	:= {FWCALENDAR_PRIORITY_HIGH, FWCALENDAR_PRIORITY_MEDIUM, FWCALENDAR_PRIORITY_LOW}
	Local nPrior	:= 0
	
	/*obs: é possivel definir a cor da atividade de duas formas.
1) utilizando o metodo SetPriority(), será definida uma cor padrao de acordo com a prioridade da tarefa passada
2) utilizando o metodo SetColor(cHexColor) e passando uma cor em hexadecimal
Se utilizar o SetColor() não utilize o SetPriority.
	*/
	
	DbSelectArea('ZZL')
	DbSetOrder(2)
	ZZL->(DBGoTOP())
	
	While ('ZZL')->(!EOF())
		
		If ZZL->ZZL_DTINI <= dDate .AND. ZZL->ZZL_DTFIN >= dDate
	
			nPrior := IIF(Val(ZZL->ZZL_PRIOR)>0,Val(ZZL->ZZL_PRIOR),2)
		
			oItem := FWCalendarActivity():New()
	
			oItem:SetID(ZZL->ZZL_ID)
			oItem:SetTitle(ZZL->ZZL_TITULO)
			oItem:SetNotes(ZZL->ZZL_NOTAS)
			oItem:SetPriority(aPrior[nPrior]) 
			oItem:SetDtIni(ZZL->ZZL_DTINI)
			oItem:SetDtFin(ZZL->ZZL_DTFIN)
			oItem:SetHrIni(ZZL->ZZL_HRINI)
			oItem:SetHrFin(ZZL->ZZL_HRFIN)
			
			AADD(aItems,oItem)
	
		EndIf
		("ZZL")->(DbSkip())
			
	EndDo
	
	RestArea(aArea)
Return aItems
Function MVC_CALEND()
Local oBrowse
oBrowse := FWMBrowse():New()
oBrowse:SetAlias('ZZL')
oBrowse:SetDescription("Cadastro de Qualquer ")
oBrowse:Activate()
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} ModelDef
Definição do modelo de Dados
@author ricardo.acosta
@since 27/03/2014
@version 1.0
/*/
//-------------------------------------------------------------------
Static Function ModelDef()
Local oModel
 
Local oStr1:= FWFormStruct(1,'ZZL')
oModel := MPFormModel():New('MVC_CALEND')
oModel:addFields('MASTER',,oStr1)
oModel:getModel('MASTER'):SetDescription('Calendario')
oModel:SetPrimaryKey({"ZZL_FILIAL" , "ZZL_ID"})

Return oModel
//-------------------------------------------------------------------
/*/{Protheus.doc} ViewDef
Definição do interface
@author ricardo.acosta
@since 27/03/2014
@version 1.0
/*/
//-------------------------------------------------------------------
Static Function ViewDef()
Local oView
Local oModel := ModelDef()
 
Local oStr1:= FWFormStruct(2, 'ZZL')
oView := FWFormView():New()
oView:SetModel(oModel)
oView:AddField('CALENDAR' , oStr1,'MASTER' ) 
oView:CreateHorizontalBox( 'BOXFORM1', 100)
oView:SetOwnerView('CALENDAR','BOXFORM1')

Return oView
  • Sem rótulos