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
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).
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" |
|
#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