Abrir outro form ao clicar no calendario (BUG)

Boas Sr(a)s,

É possível ao invés de abrir o form padrão do Calendario ao clicar em uma data, ele abrir um outro form? É que neste outro form usuarei um mestre detalhe. Manterei os campos padrão do calendario mas adicionarei mais alguns.

Procurei um evento click, ou algo semelhante e não encontrei nada. Uma coisa que pensei é colocar um redirecionamento ao abrir o form, mas não acho que seria a melhor maneira.

Grande Abraço.

Luis Gustavo Leal

Acredito que na onload do calendário você tenha que te eu. Sc_redir para a app form desejada.

É um pedido antigo, arrancar esse formulário interno da app calendário e criar opção de link com app externa

1 Curtida

Sim, o sc_redir até funcionou, abri o formulario no modo new, porem ao clicar fora ele não fecha o formulario nem o modal.

  • Tentei utilizar o sc_exit() mas ele carrega o calendario no modal.
  • Fechar após a inclusão (Aplicacao form) tbm redireciona para o calendario dentro do modal sem fechar.

Tem alguma ideia de como fazer isso após incluir/update de um registro?

Ai sair do formulário tem que dar sc_redir no calendário target _parent

Haroldo,

Percebi oq estava de errado, faltava no meu código o segundo parametro em branco.
Já trabalha.

sc_redir('form_agenda.php','','_parent');

Agora para editar um registro clicado no calendario no formulario para edição usei o código abaixo.
sc_redir(‘form_agenda.php’,id={id},’’,’_parent’);

Só me falta recarregar o calendario para aparecer atualizado, pois quando o fecho ele não faz um reload.

Gratidão!

Acho que é isso!
<
script>
function call_reload(){
self.parent.tb_remove();
$(document).ready(function() {
self.parent.calendar_reload();
});
}

Coloco no onScriptinit e chamo onde preciso com sc_ajax_javascript(‘call_reload’);

Obrigado Luiz,

Funcionou, só complementar para quem chegou até aqui.

Essa funcao JS deve ser colocado no OnScriptIini do formulario e chamada no afterInsert e afterUpdate no meu caso.

Obrigado.

Encontrei dois problemas.

  1. Valido se existe um ID para entrar no modo edição (onLoad que faz o redir para o novo form). Funciona para edição, mas quando se clica em uma data em branco ele carrega sempre o 1 registro. Não entra no modo NEW, mesmo tentando ajustar com sc_apl_conf.

Nota: se ele tem ID ele abre o formulario em modal para edição. Caso contrario ele abre o 1 registro em _parent, pq não abre a edição em _parent tbm?

if(isset({id})){
	sc_redir('form_agenda.php',id={id},'','_parent');
} else {
        // sc_apl_conf("form_agenda.php", "start", "new");  // Tentativa sem sucesso.
	sc_redir('form_agenda.php','','_parent');
}
  1. (RESOLVIDO) Quando eu clico em uma data qualquer e entro no modo de edição no formulario, se eu quiser simplesmente sair, não existe um botão cancelar ou sair, só voltar, que não fecha o modal.
    Nota: se eu utilizar ESC, ele fecha o modal.

Crie um botão JS com o código:

if (typeof parent.tb_remove === 'function') {
  parent.tb_remove();
}

Resolvido a questão 1 com a sugestão do ChatGPT com um atributo da funcao sc_redir que se quer existe no webhelp do SC rs…

Segue solução.

No local de origem (ex: botão, grid, menu), você deve usar este código:

if (!empty({id})) {
    sc_redir(form_agenda, id={id});
} else {
    sc_redir(form_agenda, nmgp_opcao=novo);
}

No formulário form_agenda , adicione no evento onLoad

if (isset([nmgp_opcao]) && [nmgp_opcao] == 'novo') {
    sc_apl_conf("form_agenda", "start", "new");
}

Esse é o comando que força o Scriptcase a abrir em modo de inclusão mesmo que o nmgp_opcao=novo não seja tratado diretamente.

Adicionar variável global

Se [nmgp_opcao] não aparecer automaticamente:

  1. Acesse “Aplicação” > “Variáveis Globais”.
  2. Se mesmo assim não aparecer:
  • Vá no evento onLoad.

  • Coloque o código:

    if (isset([nmgp_opcao])) {
    $tmp = [nmgp_opcao];
    }

Resolvido!

Obrigado a todos.

Identifiquei um BUG no meu código.

Se eu estou editando, clico em cima de uma data, ele abre no form quantas vezes for necessário.
Porem se clico em uma data em branco, ele abre o formulario no modo de inclusão. Porem os próximos cliques em qualquer data, com ou sem agendamento, ele abre uma vez o formulario certo e outra vez ele abre o proprio calendario no modal. Parece que ele não esta fechando e limpando a memória quando fecha o modal apos o formulario entrar no modo inserir.

Alguma ideia?

Obrigado

Utilize o fullcalendar na unha.

Passei um bom tempo quebrando a cabeça com esse mesmo problema relacionado ao sc_redir, que estava me causando vários erros. Depois de muito testar, encontrei uma solução que tem funcionado bem até agora.

No evento onCalendarScriptInit, adicione o seguinte código. Lembre-se de substituir form_atendimento pelo nome do formulário que você deseja utilizar:

echo <<<HTML
<script> 
	// Inicialização
	$(() => {		 
		// Redefinindo a função no escopo global
		window.addNewEvent_desktop = function(sDate, sTime, allDay) {
			tb_show('', '../form_atendimento/index.php?calendario=sim&nmgp_opcao=edit_novo&sc_cal_click_date=' + sDate + '&data_calendario=' + sDate + '&hora_calendario=' + sTime + '&sc_cal_click_time=' + sTime + '&sc_cal_click_allday=' + allDay + '&script_case_init=6722&nmgp_outra_jan=true&nmgp_url_saida=modal&TB_iframe=true&modal=true&height=650&width=1350', '');
		};

		window.editEvent_desktop = function(sEventId) {
			tb_show('', '../form_atendimento/index.php?calendario=sim&nmgp_opcao=igual_calendar&id=' + sEventId + '&__orig_id=' + sEventId + '&script_case_init=8249&nmgp_outra_jan=true&nmgp_url_saida=modal&TB_iframe=true&modal=true&height=650&width=1350', '');
		};
	});  
</script>
HTML;
1 Curtida

Boas @cesar1 ,

Percebi oq o scritp faz, que é alterar o comportamento inicial do calendario. Porem mesmo alterando o form_atendimento para form_agenda no meu caso e fazendo Get as variaveis de parametro, ele carrega o form default do calendario. Não sei a versão que do SC que está utilizando. Eu estou com a última.
Se não for lhe pedir muito, pode me enviar seu calendario + form para eu tentar perceber oq falta.

Nota: reparei que existe o script_case_init: ID da aplicação gerado pelo Scriptcase. Não sei se mudou no seu codigo, mas para mim este valor é dinamica ele muda a cada execução.

Gratidão.

Vou tentar mais alguns dias, dei uma olhada na documentação e o tempo de desenvolvimento vai elevar muito. Neste caso valeria a pena fazer por fora do SC.

Vou postando a evolução aqui.

Obrigado.