LevelOS-Core/UI/Dashboards/Cadastros/BackupAutomaticoCadastroPanel.cs

115 lines
5.5 KiB
C#

using CPM;
using MLL;
using System;
using System.Drawing;
using System.Windows.Forms;
using UI;
namespace UI
{
public partial class BackupAutomaticoCadastroPanel : FormularioModelo
{
private ModeloBackupAutomatico _auto = new ModeloBackupAutomatico();
// Controles - Vínculo e Status
private LV_TEXTBOX1 txtId, txtIdBackup, txtNomeBackup;
private CheckBox chkAtivo, chkExecutando;
// Controles - Recorrência
private ComboBox cbFrequencia, cbDiaSemana;
private NumericUpDown numIntervalo, numDiaMes;
private DateTimePicker dtpHorario;
// Controles - Monitoramento de Tempo
private LV_TEXTBOX1 txtUltimaExec, txtProximaExec;
public BackupAutomaticoCadastroPanel()
{
this.Titulo = "Agendamento Inteligente de Backup";
MontarInterface();
}
private void MontarInterface()
{
// --- SEÇÃO 1: Identificação do Job ---
content.Controls.Add(CreateSectionHeader("VÍNCULO DA TAREFA", 20));
txtId = AddInput(content, "ID", 20, 50, 70, 30, true);
txtIdBackup = AddInput(content, "ID BACKUP", 100, 50, 100, 30);
txtNomeBackup = AddInput(content, "ROTINA ASSOCIADA", 210, 50, 350, 30, true);
chkAtivo = new CheckBox { Text = "AGENDAMENTO ATIVO", Location = new Point(580, 66), AutoSize = true, Font = new Font("Segoe UI", 9, FontStyle.Bold) };
chkExecutando = new CheckBox { Text = "EM EXECUÇÃO AGORA", Location = new Point(735, 66), AutoSize = true, Enabled = false };
content.Controls.Add(chkAtivo);
content.Controls.Add(chkExecutando);
// --- SEÇÃO 2: Regras de Frequência ---
content.Controls.Add(CreateSectionHeader("PERIODICIDADE E REGRAS", 115));
Label lblFreq = new Label { Text = "FREQUÊNCIA", Location = new Point(20, 143), AutoSize = true };
cbFrequencia = new ComboBox { Location = new Point(20, 160), Size = new Size(150, 30), DropDownStyle = ComboBoxStyle.DropDownList };
cbFrequencia.Items.AddRange(new object[] { "INTERVALO", "DIARIO", "SEMANAL", "MENSAL" });
Label lblInt = new Label { Text = "INTERVALO (MIN)", Location = new Point(180, 143), AutoSize = true };
numIntervalo = new NumericUpDown { Location = new Point(180, 160), Size = new Size(100, 30), Maximum = 1440 };
Label lblHora = new Label { Text = "HORÁRIO FIXO", Location = new Point(290, 143), AutoSize = true };
dtpHorario = new DateTimePicker { Location = new Point(290, 160), Size = new Size(100, 30), Format = DateTimePickerFormat.Time, ShowUpDown = true };
Label lblSemana = new Label { Text = "DIA DA SEMANA", Location = new Point(400, 143), AutoSize = true };
cbDiaSemana = new ComboBox { Location = new Point(400, 160), Size = new Size(130, 30), DropDownStyle = ComboBoxStyle.DropDownList };
cbDiaSemana.Items.AddRange(new object[] { "Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado" });
Label lblDiaMes = new Label { Text = "DIA DO MÊS", Location = new Point(540, 143), AutoSize = true };
numDiaMes = new NumericUpDown { Location = new Point(540, 160), Size = new Size(80, 30), Minimum = 1, Maximum = 31 };
content.Controls.Add(lblFreq); content.Controls.Add(cbFrequencia);
content.Controls.Add(lblInt); content.Controls.Add(numIntervalo);
content.Controls.Add(lblHora); content.Controls.Add(dtpHorario);
content.Controls.Add(lblSemana); content.Controls.Add(cbDiaSemana);
content.Controls.Add(lblDiaMes); content.Controls.Add(numDiaMes);
// --- SEÇÃO 3: Linha do Tempo ---
content.Controls.Add(CreateSectionHeader("PRÓXIMAS ETAPAS", 220));
txtUltimaExec = AddInput(content, "ÚLTIMA VEZ QUE RODOU", 20, 250, 250, 30, true);
txtProximaExec = AddInput(content, "AGENDADO PARA", 280, 250, 250, 30, true);
txtProximaExec.BackColor = Color.LightYellow;
content.Height = 350;
// Lógica para habilitar/desabilitar campos baseado na frequência
cbFrequencia.SelectedIndexChanged += (s, e) => ActualizarInterfaceFrequencia();
}
private void ActualizarInterfaceFrequencia()
{
string freq = cbFrequencia.Text;
numIntervalo.Enabled = (freq == "INTERVALO");
dtpHorario.Enabled = (freq != "INTERVALO");
cbDiaSemana.Enabled = (freq == "SEMANAL");
numDiaMes.Enabled = (freq == "MENSAL");
}
private void PreencherModel()
{
_auto.IdBackup = int.TryParse(txtIdBackup.Text, out int idB) ? idB : 0;
_auto.Ativo = chkAtivo.Checked;
_auto.Frequencia = cbFrequencia.Text;
_auto.IntervaloMinutos = (int)numIntervalo.Value;
_auto.Horario = dtpHorario.Value.TimeOfDay;
_auto.DiaSemana = cbDiaSemana.SelectedIndex;
_auto.DiaMes = (int)numDiaMes.Value;
}
protected override void OnNovo() { _auto = new ModeloBackupAutomatico(); cbFrequencia.SelectedIndex = 1; }
protected override void OnSalvar() { PreencherModel(); MessageBox.Show("Agendamento automático configurado!", "LevelOS Scheduler"); }
protected override void OnCancelar() { }
protected override void OnExcluir() { }
protected override void OnLocalizar() { }
protected override void OnAlterar() { }
}
}