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.
NewSintaxe
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 | | | |
ActivateSintaxe
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.
#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