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

1479 lines
41 KiB
C#

using CPM;
using CustomMessageBox;
using System;
using System.Drawing;
using System.Windows.Forms;
namespace UI
{
public class OrdensCadastroPanel : FormularioModelo
{
#region Campos
private Label lblNumeroOS = null!;
private Panel cardCliente = null!;
private Panel cardDatas = null!;
private Panel cardFinanceiro = null!;
private Panel cardRodape = null!;
private TabControl tabDetalhes = null!;
private LV_TEXTBOX1 txtCliente = null!;
private LV_TEXTBOX1 txtEndereco = null!;
private LV_TEXTBOX1 txtTelefones = null!;
private LV_TEXTBOX1 txtDocs = null!;
private LV_TEXTBOX1 txtEmail = null!;
private LV_TEXTBOX1 txtGarantia = null!;
private LV_TEXTBOX1 txtAdiantamento = null!;
private LV_TEXTBOX1 txtMaoObra = null!;
private LV_TEXTBOX1 txtPecas = null!;
private LV_TEXTBOX1 txtDeslocamento = null!;
private LV_TEXTBOX1 txtServicosTerceiros = null!;
private LV_TEXTBOX1 txtOutros = null!;
private LV_TEXTBOX1 txtTotal = null!;
private DateTimePicker dtpEntrada = null!;
private DateTimePicker dtpPronto = null!;
private DateTimePicker dtpSaida = null!;
private DateTimePicker dtpGarantia = null!;
private ComboBox cbSituacao = null!;
private ComboBox cbTecnico = null!;
private ComboBox cbPrioridade = null!;
#endregion
public OrdensCadastroPanel()
{
Titulo = "Ordem de Serviço";
content.Width = 1200;
content.Height = 960;
content.BackColor = Color.FromArgb(245, 247, 250);
BuildInterface();
}
#region Build
private void BuildInterface()
{
BuildHeader();
BuildCliente();
BuildDatasStatus();
BuildFinanceiro();
BuildTabs();
BuildRodape();
}
private Panel CreateInternalCard(string title,Rectangle rect)
{
var pnl = new Panel
{
Location = rect.Location,
Size = rect.Size,
BackColor = Color.White,
BorderStyle = BorderStyle.FixedSingle
};
var lbl = new Label
{
Text = title,
Font = new Font("Segoe UI", 9f, FontStyle.Bold),
ForeColor = AccentBlue,
Location = new Point(10, 10),
AutoSize = true
};
pnl.Controls.Add(lbl);
return pnl;
}
#endregion
#region Header
private void BuildHeader()
{
var header = new Panel
{
Location = new Point(20, 20),
Size = new Size(1130, 90),
BackColor = Color.White
};
header.Paint += CardPaint;
lblNumeroOS = new Label
{
Text = "O.S. nº 1771",
Font = new Font("Segoe UI", 25f, FontStyle.Bold),
ForeColor = Color.FromArgb(210, 38, 38),
Location = new Point(15, 20),
AutoSize = true
};
var lblSub = new Label
{
Text = "Cadastro e gerenciamento da ordem de serviço",
Font = new Font("Segoe UI", 9f),
ForeColor = Color.Gray,
Location = new Point(24, 63),
AutoSize = true
};
header.Controls.Add(lblNumeroOS);
header.Controls.Add(lblSub);
content.Controls.Add(header);
}
#endregion
#region Cliente
private void BuildCliente()
{
cardCliente = CreateCard(new Rectangle(20, 130, 760, 220), "Dados do Cliente");
txtCliente = AddModernInput(cardCliente, "Cliente", 20, 45, 700);
txtEndereco = AddModernInput(cardCliente, "Endereço", 20, 95, 700);
txtTelefones = AddModernInput(cardCliente, "Telefones", 20, 145, 220);
txtDocs = AddModernInput(cardCliente, "Documentos", 260, 145, 220);
txtEmail = AddModernInput(cardCliente, "E-mail", 500, 145, 220);
content.Controls.Add(cardCliente);
txtCliente.Text = "Nicolas Felipe G. dos santos";
}
#endregion
#region Datas
private void BuildDatasStatus()
{
cardDatas = CreateCard(new Rectangle(20, 370, 760, 170), "Status e Datas");
AddSmallLabel(cardDatas, "Entrada", 20, 45);
dtpEntrada = CreatePicker(20, 65, 180);
cardDatas.Controls.Add(dtpEntrada);
AddSmallLabel(cardDatas, "Pronto", 20, 100);
dtpPronto = CreatePicker(20, 120, 180);
cardDatas.Controls.Add(dtpPronto);
AddSmallLabel(cardDatas, "Saída", 220, 45);
dtpSaida = CreatePicker(220, 65, 180);
cardDatas.Controls.Add(dtpSaida);
cbSituacao = AddComboBox(cardDatas, "Situação da OS", 430, 45, 280);
AddSmallLabel(cardDatas, "Garantia até", 220, 100);
dtpGarantia = CreatePicker(220, 120, 180);
cardDatas.Controls.Add(dtpGarantia);
var btnHistorico = new Button
{
Text = "🕘 Histórico",
Location = new Point(480, 120),
Size = new Size(220, 36),
FlatStyle = FlatStyle.Flat,
BackColor = Color.White,
ForeColor = TextDark,
Font = new Font("Segoe UI Semibold", 9f),
Cursor = Cursors.Hand
};
btnHistorico.FlatAppearance.BorderColor = BorderColor;
btnHistorico.FlatAppearance.MouseOverBackColor = Color.Blue;
// Evento clique
btnHistorico.Click += (s, e) =>
{
MessageBox.Show(
"Abrir histórico da OS",
"Histórico",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
};
// Adiciona no painel
cardDatas.Controls.Add(btnHistorico);
//txtGarantia = AddModernInput(cardDatas, "Garantia até", 250, 105, 180);
content.Controls.Add(cardDatas);
}
#endregion
#region Financeiro
private void BuildFinanceiro()
{
cardFinanceiro = CreateCard(new Rectangle(800, 130, 350, 410), "Financeiro");
int y = 50;
txtAdiantamento = AddFinanceRow(cardFinanceiro, "Adiantamento", y);
y += 42;
txtMaoObra = AddFinanceRow(cardFinanceiro, "Mão-de-obra", y);
y += 42;
txtPecas = AddFinanceRow(cardFinanceiro, "Peças", y);
y += 42;
txtDeslocamento = AddFinanceRow(cardFinanceiro, "Deslocamento", y);
y += 42;
txtServicosTerceiros = AddFinanceRow(cardFinanceiro, "Serviços terceiros", y);
y += 42;
txtOutros = AddFinanceRow(cardFinanceiro, "Outros", y);
y += 65;
var line = new Panel
{
BackColor = BorderColor,
Location = new Point(20, y),
Size = new Size(300, 1)
};
cardFinanceiro.Controls.Add(line);
y += 20;
var lblTotal = new Label
{
Text = "TOTAL",
Font = new Font("Segoe UI", 12f, FontStyle.Bold),
ForeColor = Color.FromArgb(220, 38, 38),
Location = new Point(20, y + 8),
AutoSize = true
};
txtTotal = new LV_TEXTBOX1
{
Location = new Point(140, y),
Size = new Size(180, 38),
Font = new Font("Segoe UI", 14f, FontStyle.Bold),
TextAlign = HorizontalAlignment.Right,
BorderColor = Color.FromArgb(220, 38, 38),
BorderFocusColor = Color.FromArgb(220, 38, 38),
ForeColor = Color.FromArgb(220, 38, 38)
};
cardFinanceiro.Controls.Add(lblTotal);
cardFinanceiro.Controls.Add(txtTotal);
content.Controls.Add(cardFinanceiro);
}
#endregion
#region Tabs
private void BuildTabs()
{
tabDetalhes = new TabControl
{
Location = new Point(20, 560),
Size = new Size(1130, 320),
Font = new Font("Segoe UI", 9f),
DrawMode = TabDrawMode.OwnerDrawFixed,
SizeMode = TabSizeMode.Fixed,
ItemSize = new Size(180, 35)
};
tabDetalhes.DrawItem += DrawTab;
BuildTabAparelho();
BuildTabServicos();
BuildTabPecas();
BuildTabLaudo();
BuildTabMiscelanea();
//tabDetalhes.TabPages.Add(CreateSimpleTab("Peças utilizadas"));
//tabDetalhes.TabPages.Add(CreateSimpleTab("Obs / Laudo técnico"));
//tabDetalhes.TabPages.Add(CreateSimpleTab("Miscelânea"));
content.Controls.Add(tabDetalhes);
}
private void BuildTabAparelho()
{
var tab = new TabPage("Aparelho")
{
BackColor = Color.White
};
AddModernInput(tab, "Modelo", 20, 20, 500);
AddModernInput(tab, "Marca", 550, 20, 500);
AddModernInput(tab, "Operadora", 20, 90, 300);
AddModernInput(tab, "Serial", 350, 90, 300);
AddModernInput(tab, "Nº Patrimônio", 680, 90, 370);
var txtAcessorios = AddModernInput(tab, "Acessórios", 20, 160, 500, 90);
txtAcessorios.Multiline = true;
var txtDefeito = AddModernInput(tab, "Defeito / Reclamação", 550, 160, 500, 90);
txtDefeito.Multiline = true;
tabDetalhes.TabPages.Add(tab);
}//Aparelho
private void BuildTabServicos()
{
var tab = new TabPage("Mão de obra / Serviços")
{
BackColor = Color.White
};
// =====================================================
// GRID DE SERVIÇOS
// =====================================================
var lblLista = new Label
{
Text = "Lista de Serviços executados nesta OS",
Font = new Font("Segoe UI", 9f, FontStyle.Bold),
ForeColor = TextDark,
Location = new Point(15, 15),
AutoSize = true
};
tab.Controls.Add(lblLista);
var gridServicos = new DataGridView
{
Location = new Point(15, 40),
Size = new Size(900, 240),
BackgroundColor = Color.White,
BorderStyle = BorderStyle.FixedSingle,
AllowUserToAddRows = false,
AllowUserToDeleteRows = false,
AllowUserToResizeRows = false,
RowHeadersVisible = false,
SelectionMode = DataGridViewSelectionMode.FullRowSelect,
MultiSelect = false,
AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None,
EnableHeadersVisualStyles = false,
Font = new Font("Segoe UI", 8.5f),
GridColor = BorderColor
};
// =========================
// HEADER STYLE
// =========================
gridServicos.ColumnHeadersDefaultCellStyle.BackColor =
Color.FromArgb(245, 247, 250);
gridServicos.ColumnHeadersDefaultCellStyle.ForeColor =
TextDark;
gridServicos.ColumnHeadersDefaultCellStyle.Font =
new Font("Segoe UI", 8.5f, FontStyle.Bold);
gridServicos.ColumnHeadersHeight = 30;
// =========================
// COLUNAS
// =========================
gridServicos.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Descrição",
Width = 320
});
gridServicos.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Tipo",
Width = 80
});
gridServicos.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Início",
Width = 70
});
gridServicos.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Fim",
Width = 70
});
gridServicos.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Qtd",
Width = 60
});
gridServicos.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Valor",
Width = 90
});
gridServicos.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Técnico",
Width = 180
});
tab.Controls.Add(gridServicos);
// =====================================================
// MENU LATERAL
// =====================================================
var pnlLateral = new Panel
{
Location = new Point(930, 40),
Size = new Size(170, 240),
BackColor = Color.White
};
Button CriarBotao(string texto, int y, Color cor)
{
var btn = new Button
{
Text = texto,
Location = new Point(10, y),
Size = new Size(145, 38),
FlatStyle = FlatStyle.Flat,
BackColor = cor,
ForeColor = Color.White,
Font = new Font("Segoe UI Semibold", 8.5f),
Cursor = Cursors.Hand
};
btn.FlatAppearance.BorderSize = 0;
return btn;
}
var btnPadroes = CriarBotao(
"Padrões",
0,
AccentBlue);
var btnAvulsos = CriarBotao(
"Avulsos",
50,
Color.FromArgb(34, 197, 94));
var btnExcluir = CriarBotao(
"Excluir",
100,
Color.FromArgb(239, 68, 68));
pnlLateral.Controls.Add(btnPadroes);
pnlLateral.Controls.Add(btnAvulsos);
pnlLateral.Controls.Add(btnExcluir);
// =====================================================
// TOTAL HORAS
// =====================================================
var lblHoras = new Label
{
Text = "Total de horas",
Font = new Font("Segoe UI", 8.5f, FontStyle.Bold),
ForeColor = TextDark,
Location = new Point(10, 170),
AutoSize = true
};
pnlLateral.Controls.Add(lblHoras);
var txtHoras = new LV_TEXTBOX1
{
Location = new Point(10, 190),
Size = new Size(145, 30),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue,
Font = new Font("Segoe UI", 10f, FontStyle.Bold)
};
pnlLateral.Controls.Add(txtHoras);
// =====================================================
// TOTAL
// =====================================================
var lblTotal = new Label
{
Text = "Total",
Font = new Font("Segoe UI", 9f, FontStyle.Bold),
ForeColor = Color.Red,
Location = new Point(10, 230),
AutoSize = true
};
pnlLateral.Controls.Add(lblTotal);
var txtTotal = new LV_TEXTBOX1
{
Location = new Point(10, 250),
Size = new Size(145, 34),
BorderColor = Color.Red,
BorderFocusColor = Color.Red,
Font = new Font("Segoe UI", 11f, FontStyle.Bold),
ForeColor = Color.Red
};
pnlLateral.Controls.Add(txtTotal);
tab.Controls.Add(pnlLateral);
// =====================================================
// OBSERVAÇÕES
// =====================================================
var lblObs = new Label
{
Text = "Observações internas",
Font = new Font("Segoe UI", 8.5f, FontStyle.Bold),
ForeColor = TextDark,
Location = new Point(15, 295),
AutoSize = true
};
tab.Controls.Add(lblObs);
var txtObs = new LV_TEXTBOX1
{
Location = new Point(15, 318),
Size = new Size(900, 90),
Multiline = true,
BorderColor = BorderColor,
BorderFocusColor = AccentBlue
};
tab.Controls.Add(txtObs);
// =====================================================
// BOTÃO DESLOCAMENTO
// =====================================================
var btnDeslocamento = new Button
{
Text = "Deslocamentos",
Location = new Point(930, 360),
Size = new Size(145, 40),
FlatStyle = FlatStyle.Flat,
BackColor = AccentBlue,
ForeColor = Color.White,
Font = new Font("Segoe UI Semibold", 8.5f),
Cursor = Cursors.Hand
};
//eventos clicks
btnPadroes.Click += (s, e) =>
{
NT_MessageBox.Show(
"Testando evento click padrão",
"Padrão",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
};
btnDeslocamento.FlatAppearance.BorderSize = 0;
tab.Controls.Add(btnDeslocamento);
// =====================================================
// ADD TAB
// =====================================================
tabDetalhes.TabPages.Add(tab);
}//Mão de obra e serviço
private void BuildTabPecas()
{
var tab = new TabPage("Peças utilizadas")
{
BackColor = Color.White
};
// =====================================================
// TITULO
// =====================================================
var lblLista = new Label
{
Text = "Lista de Peças utilizadas nesta OS",
Font = new Font("Segoe UI", 9f, FontStyle.Bold),
ForeColor = TextDark,
Location = new Point(15, 15),
AutoSize = true
};
tab.Controls.Add(lblLista);
// =====================================================
// GRID
// =====================================================
var gridPecas = new DataGridView
{
Location = new Point(15, 40),
Size = new Size(900, 360),
BackgroundColor = Color.White,
BorderStyle = BorderStyle.FixedSingle,
AllowUserToAddRows = false,
AllowUserToDeleteRows = false,
AllowUserToResizeRows = false,
RowHeadersVisible = false,
SelectionMode = DataGridViewSelectionMode.FullRowSelect,
MultiSelect = false,
AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None,
EnableHeadersVisualStyles = false,
Font = new Font("Segoe UI", 8.5f),
GridColor = BorderColor
};
// =====================================================
// HEADER STYLE
// =====================================================
gridPecas.ColumnHeadersDefaultCellStyle.BackColor =
Color.FromArgb(245, 247, 250);
gridPecas.ColumnHeadersDefaultCellStyle.ForeColor =
TextDark;
gridPecas.ColumnHeadersDefaultCellStyle.Font =
new Font("Segoe UI", 8.5f, FontStyle.Bold);
gridPecas.ColumnHeadersHeight = 30;
// =====================================================
// COLUNAS
// =====================================================
gridPecas.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Peça nº",
Width = 120
});
gridPecas.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Descrição",
Width = 300
});
gridPecas.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Valor un",
Width = 110
});
gridPecas.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Qtd.",
Width = 80
});
gridPecas.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Valor Total",
Width = 120
});
gridPecas.Columns.Add(new DataGridViewTextBoxColumn
{
HeaderText = "Técnico",
Width = 170
});
tab.Controls.Add(gridPecas);
// =====================================================
// MENU LATERAL
// =====================================================
var pnlLateral = new Panel
{
Location = new Point(930, 40),
Size = new Size(170, 360),
BackColor = Color.White
};
Button CriarBotao(
string texto,
int y,
Color cor)
{
var btn = new Button
{
Text = texto,
Location = new Point(10, y),
Size = new Size(145, 40),
FlatStyle = FlatStyle.Flat,
BackColor = cor,
ForeColor = Color.White,
Font = new Font("Segoe UI Semibold", 8.5f),
Cursor = Cursors.Hand
};
btn.FlatAppearance.BorderSize = 0;
return btn;
}
// =====================================================
// BOTÕES
// =====================================================
var btnEstoque = CriarBotao(
"Peças do Estoque",
0,
AccentBlue);
var btnAvulsas = CriarBotao(
"Peças avulsas",
50,
Color.FromArgb(34, 197, 94));
var btnKit = CriarBotao(
"KIT Montado",
100,
Color.FromArgb(245, 158, 11));
var btnExcluir = CriarBotao(
"Excluir",
150,
Color.FromArgb(239, 68, 68));
var btnOrcamento = CriarBotao(
"Inserir orçamento",
210,
Color.FromArgb(99, 102, 241));
var btnRequisicao = CriarBotao(
"Requisição",
260,
Color.FromArgb(107, 114, 128));
pnlLateral.Controls.Add(btnEstoque);
pnlLateral.Controls.Add(btnAvulsas);
pnlLateral.Controls.Add(btnKit);
pnlLateral.Controls.Add(btnExcluir);
pnlLateral.Controls.Add(btnOrcamento);
pnlLateral.Controls.Add(btnRequisicao);
tab.Controls.Add(pnlLateral);
// =====================================================
// ADD TAB
// =====================================================
tabDetalhes.TabPages.Add(tab);
}//Peças utilizadas
private void BuildTabLaudo()
{
var tab = new TabPage("Obs / Laudo técnico")
{
BackColor = Color.White
};
// =====================================================
// TITULO
// =====================================================
var lblInfo = new Label
{
Text = "Escreva no espaço abaixo o laudo técnico ou detalhes do conserto do equipamento",
Font = new Font("Segoe UI", 9f, FontStyle.Bold),
ForeColor = TextDark,
Location = new Point(15, 15),
AutoSize = true
};
tab.Controls.Add(lblInfo);
// =====================================================
// AJUDA
// =====================================================
var lblAjuda = new Label
{
Text = "(SHIFT + Enter para pular linha)",
Font = new Font("Segoe UI", 8f),
ForeColor = Color.Gray,
Location = new Point(780, 18),
AutoSize = true
};
tab.Controls.Add(lblAjuda);
// =====================================================
// CAMPO DO LAUDO
// =====================================================
var txtLaudo = new LV_TEXTBOX1
{
Location = new Point(15, 40),
Size = new Size(1080, 300),
Multiline = true,
BorderColor = BorderColor,
BorderFocusColor = AccentBlue,
Font = new Font("Segoe UI", 9f),
BackColor = Color.White
};
tab.Controls.Add(txtLaudo);
// =====================================================
// BOTÃO PREENCHER
// =====================================================
var btnPreencher = new Button
{
Text = "📝 Preencher Laudo",
Location = new Point(15, 355),
Size = new Size(180, 38),
FlatStyle = FlatStyle.Flat,
BackColor = AccentBlue,
ForeColor = Color.White,
Font = new Font("Segoe UI Semibold", 9f),
Cursor = Cursors.Hand
};
btnPreencher.FlatAppearance.BorderSize = 0;
btnPreencher.Click += (s, e) =>
{
txtLaudo.Text =
@"Equipamento analisado e testado em bancada.
Foi identificado defeito no componente principal.
Realizado:
- limpeza interna
- substituição de peças
- testes finais
Equipamento funcionando normalmente.";
};
tab.Controls.Add(btnPreencher);
// =====================================================
// ADD TAB
// =====================================================
tabDetalhes.TabPages.Add(tab);
}//Laudo tecnico
private void BuildTabMiscelanea()
{
var tab = new TabPage("Miscelânea")
{
BackColor = Color.White
};
// =====================================================
// CARD GARANTIA
// =====================================================
var cardGarantia = CreateInternalCard(
"Garantia / Garantidor",
new Rectangle(15, 15, 650, 280));
// Garantidor
var cbGarantidor = AddComboBox(
cardGarantia,
"Fábrica / Garantidor",
15,
20,
300);
cbGarantidor.Items.AddRange(new object[]
{
"Nenhum",
"Samsung",
"LG",
"Motorola",
"Dell"
});
cbGarantidor.SelectedIndex = 0;
// Senha
AddSmallLabel(
cardGarantia,
"Senha garantidor",
15,
75);
var txtSenha = new LV_TEXTBOX1
{
Location = new Point(15, 95),
Size = new Size(220, 30),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue
};
cardGarantia.Controls.Add(txtSenha);
// Aviso
var lblAviso = new Label
{
Text =
"A fábrica/Garantidor é aquele que pagará pelo reparo do equipamento.",
Font = new Font("Segoe UI", 8f),
ForeColor = Color.FromArgb(120, 53, 15),
BackColor = Color.FromArgb(254, 249, 195),
Location = new Point(250, 95),
Size = new Size(360, 45),
TextAlign = ContentAlignment.MiddleCenter
};
cardGarantia.Controls.Add(lblAviso);
// NF Venda
AddSmallLabel(
cardGarantia,
"Nº NF de venda",
15,
150);
var txtNFVenda = new LV_TEXTBOX1
{
Location = new Point(15, 170),
Size = new Size(180, 30),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue
};
cardGarantia.Controls.Add(txtNFVenda);
// Certificado
AddSmallLabel(
cardGarantia,
"Nº certificado de garantia",
220,
150);
var txtCertificado = new LV_TEXTBOX1
{
Location = new Point(220, 170),
Size = new Size(390, 30),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue
};
cardGarantia.Controls.Add(txtCertificado);
// Compra
AddSmallLabel(
cardGarantia,
"Data da compra",
15,
215);
var dtCompra = new DateTimePicker
{
Location = new Point(15, 235),
Width = 180,
Format = DateTimePickerFormat.Short,
Font = new Font("Segoe UI", 8.5f)
};
cardGarantia.Controls.Add(dtCompra);
// Revendedor
AddSmallLabel(
cardGarantia,
"Revendedor",
220,
215);
var txtRevendedor = new LV_TEXTBOX1
{
Location = new Point(220, 235),
Size = new Size(390, 30),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue
};
cardGarantia.Controls.Add(txtRevendedor);
tab.Controls.Add(cardGarantia);
// =====================================================
// CARD NF ENTRADA
// =====================================================
var cardNF = CreateInternalCard(
"Nota Fiscal Entrada / Remessa",
new Rectangle(685, 15, 420, 130));
// Numero NF
AddSmallLabel(
cardNF,
"Número da NF",
15,
20);
var txtNumeroNF = new LV_TEXTBOX1
{
Location = new Point(15, 40),
Size = new Size(140, 30),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue
};
cardNF.Controls.Add(txtNumeroNF);
// Valor NF
AddSmallLabel(
cardNF,
"Valor da NF",
175,
20);
var txtValorNF = new LV_TEXTBOX1
{
Location = new Point(175, 40),
Size = new Size(180, 30),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue
};
cardNF.Controls.Add(txtValorNF);
// Emissor
var cbFornecedorNF = AddComboBox(
cardNF,
"Emissor (Fornecedor)",
15,
75,
340);
cbFornecedorNF.Items.Add("Nenhum");
cbFornecedorNF.SelectedIndex = 0;
tab.Controls.Add(cardNF);
// =====================================================
// CARD TERCEIROS
// =====================================================
var cardTerceiros = CreateInternalCard(
"Ordem de serviço de Terceiros / Parceiros",
new Rectangle(685, 160, 420, 135));
// OS Terceiro
AddSmallLabel(
cardTerceiros,
"Nº OS terceiros",
15,
20);
var txtOSTerceiros = new LV_TEXTBOX1
{
Location = new Point(15, 40),
Size = new Size(120, 30),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue
};
cardTerceiros.Controls.Add(txtOSTerceiros);
// OS Fabricante
AddSmallLabel(
cardTerceiros,
"Nº OS Fabricante",
160,
20);
var txtOSFabricante = new LV_TEXTBOX1
{
Location = new Point(160, 40),
Size = new Size(160, 30),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue
};
cardTerceiros.Controls.Add(txtOSFabricante);
// Fornecedor
var cbFornecedor = AddComboBox(
cardTerceiros,
"Emissor (Fornecedor)",
15,
75,
340);
cbFornecedor.Items.Add("Nenhum");
cbFornecedor.SelectedIndex = 0;
tab.Controls.Add(cardTerceiros);
// =====================================================
// ADD TAB
// =====================================================
tabDetalhes.TabPages.Add(tab);
}//Miscelânea
#endregion
#region Rodapé
private void BuildRodape()
{
cardRodape = CreateCard(new Rectangle(20, 900, 1130, 70), "");
cbTecnico = AddComboBox(cardRodape, "Técnico Responsável", 20, 10, 350);
cbPrioridade = AddComboBox(cardRodape, "Prioridade", 400, 10, 180);
cbPrioridade.Items.AddRange(new object[]{"Baixa","Normal", "Alta", "Urgente" ,"Emergencial"});
cbPrioridade.SelectedIndex = 1;
var btnFotos = new Button
{
Text = "Fotos / Docs",
Location = new Point(930, 20),
Size = new Size(160, 35),
FlatStyle = FlatStyle.Flat,
BackColor = AccentBlue,
ForeColor = Color.White,
Font = new Font("Segoe UI Semibold", 9f),
Cursor = Cursors.Hand
};
btnFotos.FlatAppearance.BorderSize = 0;
cardRodape.Controls.Add(btnFotos);
content.Controls.Add(cardRodape);
}
#endregion
#region Helpers
private Panel CreateCard(Rectangle rect, string title)
{
var pnl = new Panel
{
Location = rect.Location,
Size = rect.Size,
BackColor = Color.White
};
pnl.Paint += CardPaint;
if (!string.IsNullOrWhiteSpace(title))
{
var lbl = new Label
{
Text = title,
Font = new Font("Segoe UI", 10f, FontStyle.Bold),
ForeColor = AccentBlue,
Location = new Point(18, 15),
AutoSize = true
};
pnl.Controls.Add(lbl);
var line = new Panel
{
BackColor = BorderColor,
Location = new Point(18, 40),
Size = new Size(rect.Width - 36, 1)
};
pnl.Controls.Add(line);
}
return pnl;
}
private LV_TEXTBOX1 AddModernInput(
Control parent,
string label,
int x,
int y,
int width,
int height = 32)
{
var lbl = new Label
{
Text = label,
Font = new Font("Segoe UI", 8.5f, FontStyle.Bold),
ForeColor = TextDark,
Location = new Point(x, y),
AutoSize = true
};
var txt = new LV_TEXTBOX1
{
Location = new Point(x, y + 20),
Size = new Size(width, height),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue,
BackColor = Color.White
};
parent.Controls.Add(lbl);
parent.Controls.Add(txt);
return txt;
}
private LV_TEXTBOX1 AddFinanceRow(Control parent, string text, int y)
{
var lbl = new Label
{
Text = text,
Font = new Font("Segoe UI", 9f, FontStyle.Bold),
ForeColor = TextDark,
Location = new Point(20, y + 7),
AutoSize = true
};
var txt = new LV_TEXTBOX1
{
Location = new Point(140, y),
Size = new Size(180, 32),
TextAlign = HorizontalAlignment.Right,
BorderColor = BorderColor,
BorderFocusColor = AccentBlue
};
parent.Controls.Add(lbl);
parent.Controls.Add(txt);
return txt;
}
private void AddSmallLabel(Control parent, string text, int x, int y)
{
parent.Controls.Add(new Label
{
Text = text,
Font = new Font("Segoe UI", 8.5f, FontStyle.Bold),
ForeColor = TextDark,
Location = new Point(x, y),
AutoSize = true
});
}
private DateTimePicker CreatePicker(int x, int y, int width)
{
return new DateTimePicker
{
Location = new Point(x, y),
Width = width,
Format = DateTimePickerFormat.Custom,
CustomFormat = "dd/MM/yyyy HH:mm",
Font = new Font("Segoe UI", 9f)
};
}
private TabPage CreateSimpleTab(string title)
{
return new TabPage(title)
{
BackColor = Color.White
};
}
#endregion
#region Eventos Visuais
private void CardPaint(object? sender, PaintEventArgs e)
{
var pnl = sender as Panel;
using var pen = new Pen(BorderColor);
e.Graphics.DrawRectangle(
pen,
0,
0,
pnl!.Width - 1,
pnl.Height - 1);
}
private void DrawTab(object? sender, DrawItemEventArgs e)
{
var tab = tabDetalhes.TabPages[e.Index];
var rect = e.Bounds;
bool selected = e.Index == tabDetalhes.SelectedIndex;
using var back = new SolidBrush(
selected
? AccentBlue
: Color.FromArgb(230, 233, 238));
using var text = new SolidBrush(
selected
? Color.White
: TextDark);
e.Graphics.FillRectangle(back, rect);
var sf = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
e.Graphics.DrawString(
tab.Text,
new Font("Segoe UI", 9f, FontStyle.Bold),
text,
rect,
sf);
}
#endregion
#region Métodos Abstratos
protected override void OnNovo()
{
}
protected override void OnAlterar()
{
}
protected override void OnExcluir()
{
}
protected override void OnLocalizar()
{
}
protected override void OnSalvar()
{
}
protected override void OnCancelar()
{
}
#endregion
}
}