Skip to content

Instantly share code, notes, and snippets.

Created June 21, 2013 13:15
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save anonymous/5831048 to your computer and use it in GitHub Desktop.
Gestión de empleados para el tutorial de programa de gestión desde 0
unit UEmpleados;
{$R BOTONERA.RES}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, IBDatabase,
MMSystem, //Para la botonera
NewPanelDB, //Para usar el NEwPanelDB
SPBBC, //Para TSpeedButtonBC
Lapelpanel, //Para paneles con solapa
MyDbIbMemo, //Para DbiMemo
TDbIbchkbox, //Para campos boolean en Firebird
Mask, DbEditDefault, //PAra usar los DbeditDefault en vez de los Dbedit normal
DBCBEXT, //Para usar el DbCombobox Extendido
GroupboxJL, //Para usar el CgoupBox especial
Dialogs, ComCtrls, ExtCtrls, Grids, DBGrids, StdCtrls, Spin, Buttons, DB, DBCtrls,
DBneweditjl;
//[ 1]----------------[ Para poder tener tabs del page control en color]--------
Type
TTabSheet = class(ComCtrls.TTabSheet)
private
FColor: TColor;
procedure SetColor(Value: TColor);
procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd);message WM_ERASEBKGND;
public
constructor Create(aOwner: TComponent); override;
property Color: TColor read FColor write SetColor;
end;
//[ 1]--FIN SECCIÓN---[ Para poder tener tabs del page control en color]--------
type
TFEmpleados = class(TForm)
PanelBotonera: TNewPanelDB;
SBBarraStatus: TStatusBar;
Panel1: TPanel;
Panel2: TPanel;
PanelDatos: TNewPanelDB;
Panel3: TPanel;
DBGNoEnable: TDBGrid;
PanelConfirmar: TNewPanelDB;
DsPrincipal: TDataSource;
SBPrimero: TSpeedButtonBC;
SBMenosx: TSpeedButtonBC;
SBMenos1: TSpeedButtonBC;
SBMas1: TSpeedButtonBC;
SBMasX: TSpeedButtonBC;
SBUltimo: TSpeedButtonBC;
SbNuevo: TSpeedButtonBC;
SbModificar: TSpeedButtonBC;
SbBorrar: TSpeedButtonBC;
SB_Salir: TSpeedButtonBC;
SBBuscar: TSpeedButtonBC;
SBImprimir: TSpeedButtonBC;
SBConfirmar: TSpeedButtonBC;
SBCancelar: TSpeedButtonBC;
Label14: TLabel;
SEMobeByX: TSpinEdit;
GBBuscar: TGroupBoxJL;
Ebusqueda: TEdit;
BLimpiar: TButton;
BBuscar: TButton;
BCerrar: TButton;
GBImprimir: TGroupBoxJL;
CBVistaPrevia: TCheckBox;
CBVerDialogo: TCheckBox;
BCerrarIMP: TButton;
Timer1: TTimer;
PC: TPageControl;
Datos: TTabSheet;
Persona: TTabSheet;
Notas: TTabSheet;
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label15: TLabel;
Label16: TLabel;
DBNCODIGO: TDBNewEditJL;
DBNMedia: TDBNewEditJL;
DBNFechaAlta: TDBNewEditJL;
DBNFechaBaja: TDBNewEditJL;
DBNNSS: TDBNewEditJL;
DBNDTO1: TDBNewEditJL;
DBNDTO2: TDBNewEditJL;
DBNCIF: TDBNewEditJL;
DBIBChecBoxAgente: TDBIBCheckbox;
DBNDTO3: TDBNewEditJL;
DBNDTO4: TDBNewEditJL;
DBNDTO5: TDBNewEditJL;
DBNNombre: TDBNewEditJL;
DBNSalario: TDBNewEditJL;
DBNPuesto: TDBNewEditJL;
Label2: TLabel;
DBIBMemo1: TDBIBMemo;
Label17: TLabel;
DBImage2: TDBImage;
DBGrid1: TDBGrid;
Label18: TLabel;
DBNewEditJL1: TDBNewEditJL;
Label19: TLabel;
DBNewEditJL2: TDBNewEditJL;
Label20: TLabel;
DBNewEditJL3: TDBNewEditJL;
Label21: TLabel;
DBIBMemo2: TDBIBMemo;
DBGrid2: TDBGrid;
DBNewEditJL4: TDBNewEditJL;
DBNewEditJL5: TDBNewEditJL;
SpeedButtonBC1: TSpeedButtonBC;
NewPanelDB1: TNewPanelDB;
SBBCDatos: TSpeedButtonBC;
SPBCNOtas: TSpeedButtonBC;
SPBCPersonaContacto: TSpeedButtonBC;
DBNavigator1: TDBNavigator;
PanelAuxiliar: TNewPanelDB;
Panel4: TPanel;
SPBCModificaPC: TSpeedButtonBC;
SPBCNuevaPC: TSpeedButtonBC;
Panel5: TPanel;
Image1: TImage;
Panel6: TPanel;
SPBCModificarNota: TSpeedButtonBC;
SPBCNuevaNota: TSpeedButtonBC;
Panel7: TPanel;
Image2: TImage;
DBImage1: TDBImage;
Memo1: TMemo;
DsNotas2: TDataSource;
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure SBPrimeroClick(Sender: TObject);
procedure SBMenosxClick(Sender: TObject);
procedure SBMenos1Click(Sender: TObject);
procedure SBMas1Click(Sender: TObject);
procedure SBMasXClick(Sender: TObject);
procedure SBUltimoClick(Sender: TObject);
procedure SbNuevoClick(Sender: TObject);
procedure SbModificarClick(Sender: TObject);
procedure SbBorrarClick(Sender: TObject);
procedure SBBuscarClick(Sender: TObject);
procedure BLimpiarClick(Sender: TObject);
procedure BBuscarClick(Sender: TObject);
procedure BCerrarClick(Sender: TObject);
procedure EbusquedaChange(Sender: TObject);
procedure SBImprimirClick(Sender: TObject);
procedure BCerrarIMPClick(Sender: TObject);
procedure SB_SalirClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure SBCancelarClick(Sender: TObject);
procedure SBConfirmarClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure PCDrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean);
procedure CambiarPagina(index: Integer; Sender: TObject);
procedure CargaDatos(Tipo:Integer;Nuevo:Boolean;Nombre:string;Sender: TObject);
procedure SpeedButtonBC1Click(Sender: TObject);
procedure SPBCNOtasClick(Sender: TObject);
procedure SPBCPersonaContactoClick(Sender: TObject);
procedure SPBCNuevaNotaClick(Sender: TObject);
procedure SPBCNuevaPCClick(Sender: TObject);
procedure SPBCModificaPCClick(Sender: TObject);
procedure SPBCModificarNotaClick(Sender: TObject);
procedure AddCabeceraMemo(Tipo:Integer);
procedure DSPrincipalDataChange(Sender: TObject; Field: TField);
procedure FormShow(Sender: TObject);
procedure SBBCDatosClick(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure DBNDTO1Exit(Sender: TObject);
procedure DBNFechaAltaExit(Sender: TObject);
procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure DBGNoEnableDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FEmpleados: TFEmpleados;
IBT:TIBTransaction;
//Variables para el historico (H) sólo las usaremos para este módulo
VarSHCodigo,VarSHNombre, VarsHNSS, VarSHCIF, VarSHPuesto, VarSAgente:String;
VarFHSalario, VarFHMEdia, VarFHDto1, VarFHDto2, VarFHDto3, VarFHDto4, VarFHDto5:Double;
VarDHFAalta, VarDHFBaja: TDate;
implementation
{$R *.dfm}
uses UDM, Fun, FUN_DBGRID, UMENU, UNotas,UPC;
//[ 2]----------------[ Para poder tener tabs del page control en color]--------
constructor TTabSheet.Create(aOwner: TComponent);
//------------------------------------------------------------------------------
//*************************************[ Crear nueva propiedad tabsheet ]*******
//------------------------------------------------------------------------------
begin
inherited;
FColor := clBtnFace;
end;
//[ 2]--FIN SECCIÓN---[ Para poder tener tabs del page control en color]--------
//[ 3]----------------[ Para poder tener tabs del page control en color]--------
procedure TTabSheet.SetColor(Value: TColor);
//------------------------------------------------------------------------------
//**************************************************[ Seleción de color ]*******
//------------------------------------------------------------------------------
begin
if FColor <> Value then
begin
FColor := Value;
Invalidate;
end;
end;
//[ 3]--FIN SECCIÓN---[ Para poder tener tabs del page control en color]--------
//[ 4]----------------[ Para poder tener tabs del page control en color]--------
procedure TTabSheet.WMEraseBkGnd(var Msg: TWMEraseBkGnd);
//------------------------------------------------------------------------------
//******************************************[ Dibujar en el pagecontrol ]*******
//------------------------------------------------------------------------------
begin
if FColor = clBtnFace then
inherited
else
begin
Brush.Color := FColor;
Windows.FillRect(Msg.dc, ClientRect, Brush.Handle);
Msg.Result := 1;
end;
end;
//[ 4]--FIN SECCIÓN---[ Para poder tener tabs del page control en color]--------
procedure TFEmpleados.CambiarPagina(index: Integer; Sender: TObject);
//------------------------------------------------------------------------------
//********************************************************[ Cambiar Página ]****
// Al pulsar los botones para acceder a las pestañas
//------------------------------------------------------------------------------
var VarBActivar:Boolean;
VarISegundoPageControlIndex:Integer;
VarSModulo, VarSCodigo:string;
begin
VarBActivar:=true;
VarISegundoPageControlIndex:=0;
VarSNomMod:='EMPLEADOS';
VarSModulo:='EMPLEADOS';
VarSCodigo:=DBNCodigo.Text;
case index of
0:begin //Datos
VarBActivar:=False;
end;
1:begin //personas de contacto
ActQuery(DM.IBQPersonasContacto,'SELECT * FROM PC WHERE (PC.MODULO = '+QuotedStr(VarSModulo)+') AND (PC.CODIGO = '+QuotedStr(VarSCodigo)+')');
if not DM.IBQPersonasContacto.IsEmpty then
begin
DBNavigator1.DataSource:=DM.DSIBQPersonasContacto;
end else DM.IBQPersonasContacto.Active:=False;
VarISegundoPageControlIndex:=1;
end;
2:begin //Notas
ActQuery(DM.IBQNOTAS,'SELECT * FROM NOTAS WHERE (NOTAS.NOMBREMODULO = '+QuotedStr(VarSModulo)+') AND (NOTAS.CODIGO = '+QuotedStr(VarSCodigo)+')');
if not DM.IBQNOTAS.IsEmpty then
begin
DBNavigator1.DataSource:=DM.DSNotas;
//Gride de notas
TStringGrid(DBGrid2).DefaultRowHeight :=30; //Debe cambiarse el Grid
TStringGrid(DBGrid2).RowHeights[0]:=20; //Debe cambiarse el Grid
end else DM.IBQNOTAS.Active:=False;
end;
end;
DBNavigator1.Enabled:=VarBActivar;
PC.ActivePageIndex:=index;
end;
procedure TFEmpleados.CargaDatos(Tipo:Integer;Nuevo:Boolean;Nombre:string;Sender: TObject);
//------------------------------------------------------------------------------
//***********************************************************[ Carga datos ]****
// Datos Comunes (la idea es la carga de datos comunes
//------------------------------------------------------------------------------
var VarSModulo, VarSModulo2, VarSCodigo:string;
begin
VarSModulo:='EMPLEADOS';
VarSNomMod:='EMPLEADOS';
VarSCodigo:=DBNCodigo.Text;
VarSModulo2:='el proveedor'; //Como reutilizamos el código para sólo tener que cambiar aquí el módulo
if DBNCodigo.Text<>'' then
begin
VarSNomMod:=VarSModulo;
VarsCod:=DBNCodigo.Field.Value;
case Tipo of
0:begin //Notas
SPBCNOtasClick(sender);
FNotas.Show;
if Nuevo=false then
begin
ActIbdataset(DM.IBDNOTAS,'SELECT * FROM NOTAS WHERE (NOTAS.NOMBREMODULO = '+QuotedStr(VarSModulo)+') AND (NOTAS.CODIGO = '+QuotedStr(VarSCodigo)+')');
end else
begin
Fnotas.SbNuevoClick(Sender);
Fnotas.DBNewEditJL3.SetFocus;
end;
end;
1:begin //Personas de Contacto
SPBCPersonaContactoClick(sender);
FPC.Show;
if Nuevo=false then
begin
ActIbdataset(DM.IBDPC,'SELECT * FROM PC WHERE (PC.MODULO = '+QuotedStr(VarSModulo)+') AND (PC.CODIGO = '+QuotedStr(VarSCodigo)+')');
end else
begin
FPC.SbNuevoClick(Sender);
FPC.DBEdit3.SetFocus;
end;
end;
end;
end else
begin
if Nuevo then ShowMessage('Debe crear y seleccionar '+VarSModulo2+' para poder crearle una nuevo/a '+Nombre)
else ShowMessage('Debe crear y seleccionar '+VarSModulo2+' para poder modificar/borrar el/la '+Nombre);
end;
end;
procedure TFEmpleados.DBGNoEnableDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
//------------------------------------------------------------------------------
//*******************************************************[ ZEbaro del Grid ]****
//------------------------------------------------------------------------------
begin
Zebrado(DsPrincipal,DBGNoEnable, Rect, Column, State, COLOR1GRID,COLOR2GRID);
end;
procedure TFEmpleados.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
//------------------------------------------------------------------------------
//*******************************************************[ ZEbaro del Grid ]****
//------------------------------------------------------------------------------
begin
Zebrado(DM.DSIBQPersonasContacto,DBGrid1, Rect, Column, State, COLOR1GRID,COLOR2GRID);
end;
procedure TFEmpleados.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
//------------------------------------------------------------------------------
//*******************************************************[ ZEbaro del Grid ]****
//------------------------------------------------------------------------------
begin
Zebrado(DM.DSNotas,DBGrid2, Rect, Column, State, COLOR1GRID,COLOR2GRID);
MemoGridB(DBGrid2,DM.DSNotas.DataSet.FieldByName('NOTAS'), Rect, Column, State);
end;
procedure TFEmpleados.DBNDTO1Exit(Sender: TObject);
//------------------------------------------------------------------------------
//*******************************************************[ Saliir de Dto 1 ]****
//------------------------------------------------------------------------------
begin
if DBNDTO2.Text='' then DBNDTO2.Field.Value:=DBNDTO1.Field.Value;
if DBNDTO3.Text='' then DBNDTO3.Field.Value:=DBNDTO1.Field.Value;
if DBNDTO4.Text='' then DBNDTO4.Field.Value:=DBNDTO1.Field.Value;
if DBNDTO5.Text='' then DBNDTO5.Field.Value:=DBNDTO1.Field.Value;
end;
procedure TFEmpleados.DBNFechaAltaExit(Sender: TObject);
//------------------------------------------------------------------------------
//************************************************[ Salir de fecha de Alta ]****
//------------------------------------------------------------------------------
begin
if DBNFechaBaja.Text='' then DBNFechaBaja.Text:=DBNFechaAlta.Text;
end;
procedure TFEmpleados.DSPrincipalDataChange(Sender: TObject; Field: TField);
//------------------------------------------------------------------------------
//****************************************************[ DsPrincipal Change ]****
//------------------------------------------------------------------------------
begin
if FEmpleados.Active then //Prmero comprobamos que la página esta activa
begin
if not (DsPrincipal.DataSet.State in [dsEdit,dsInsert]) then //Si no estamos editando o insertando
begin
if DBNCODIGO.Text<>'' then
begin
ActQuery(DM.IBQPersonasContacto,' SELECT * FROM PC WHERE (PC.MODULO = '+QuotedStr('EMPLEADOS')+
') AND (PC.CODIGO = '+QuotedStr(DsPrincipal.DataSet.FieldByName('CODIGO').value)+')');
ActQuery(DM.IBQNOTAS,'SELECT * FROM NOTAS WHERE (NOTAS.NOMBREMODULO = '+QuotedStr('EMPLEADOS')+
') AND (NOTAS.CODIGO = '+QuotedStr(DsPrincipal.DataSet.FieldByName('CODIGO').value)+')');
end;
end;
end;
end;
procedure TFEmpleados.BBuscarClick(Sender: TObject);
//------------------------------------------------------------------------------
//**************************************************************[ Buscar ]******
//------------------------------------------------------------------------------
var Campo:string;
begin
Campo:='NOMBRE'; {Dato a rellenar por el progrmador con el nombre del campo en la busqueda}
DSPrincipal.DataSet.Locate(Campo,Ebusqueda.Text,[loCaseInsensitive,loPartialKey]);
end;
procedure TFEmpleados.BCerrarClick(Sender: TObject);
//------------------------------------------------------------------------------
//*****************************************************[ Cerrar Busqueda ]******
//------------------------------------------------------------------------------
begin
BLimpiarClick(Sender);
GBBuscar.Visible:=False;
end;
procedure TFEmpleados.BCerrarIMPClick(Sender: TObject);
//------------------------------------------------------------------------------
//****************************************************[ Cerrar Imrprimir ]******
//------------------------------------------------------------------------------
begin
GBImprimir.Visible:=False;
end;
procedure TFEmpleados.BLimpiarClick(Sender: TObject);
//------------------------------------------------------------------------------
//**************************************************[ Limpia la busqueda ]******
//------------------------------------------------------------------------------
begin
Ebusqueda.Text:='';
BBuscarClick(Sender);
Ebusqueda.SetFocus;
end;
procedure TFEmpleados.EbusquedaChange(Sender: TObject);
//------------------------------------------------------------------------------
//*************************************[ Mientras se escribe en busqueda ]******
//------------------------------------------------------------------------------
begin
BBuscarClick(sender);
end;
procedure TFEmpleados.FormActivate(Sender: TObject);
//------------------------------------------------------------------------------
//********************************************[ Cuando se activa El form ]******
// Lo que queremos que haga nuestro Form Cuando se Actiba
//------------------------------------------------------------------------------
begin
//Carganmos las imagenes de los botones
SBPrimero.Glyph.Handle:=Loadbitmap(HInstance,'FIRST');
SBMenosx.Glyph.Handle:=Loadbitmap(HInstance,'RETROCEDER');
SBMenos1.Glyph.Handle:=Loadbitmap(HInstance,'PRIOR');
SBMas1.Glyph.Handle:=Loadbitmap(HInstance,'NEXT');
SBMasX.Glyph.Handle:=Loadbitmap(HInstance,'AVANZAR');
SBUltimo.Glyph.Handle:=Loadbitmap(HInstance,'LAST');
SbNuevo.Glyph.Handle:=Loadbitmap(HInstance,'NUEVO');
SbModificar.Glyph.Handle:=Loadbitmap(HInstance,'EDIT');
SbBorrar.Glyph.Handle:=Loadbitmap(HInstance,'BORRAR');
SB_Salir.Glyph.Handle:=Loadbitmap(HInstance,'SALIR');
SBBuscar.Glyph.Handle:=Loadbitmap(HInstance,'BUSCAR');
SBImprimir.Glyph.Handle:=Loadbitmap(HInstance,'IMPRIMIR');
SBConfirmar.Glyph.Handle:=Loadbitmap(HInstance,'CHECKROUND');
SBCancelar.Glyph.Handle:=Loadbitmap(HInstance,'CANCEL');
if Timer1.Enabled=false then Timer1.Enabled:=True;
//Ponemos el Juego de colores de mis NewPanelDB
PanelBotonera.ColorNotActive:=COLORPANELACT;
PanelBotonera.ActiveColor:=COLORPANELNOACT;
PanelDatos.ActiveColor:=COLORPANELACT;
PanelDatos.ColorNotActive:=COLORPANELNOACT;
PanelConfirmar.ActiveColor:=COLORPANELACT;
PanelConfirmar.ColorNotActive:=COLORPANELNOACT;
//El siguiente código tendria que ponerse en los módulo anteriores ya que al pulsar, un botón de los auxiliares, se nos iria, ahora
// Al controlarlo mediante un NewPAnelDB unido al DSPrincipal y inverseAction a true, evitamos que cuando estemos en inserción o en
//edición, sean piulsables estos botones, evitando posibles errores
PanelAuxiliar.ColorNotActive:=COLORPANELACT;
PanelAuxiliar.ActiveColor:=COLORPANELNOACT;
end;
procedure TFEmpleados.FormClose(Sender: TObject; var Action: TCloseAction);
//------------------------------------------------------------------------------
//*************************************************[ Al Cerrarse El Form ]******
// Cerramos todos los procesos para que no consuman memoria y posibles errores
//------------------------------------------------------------------------------
begin
if Timer1.Enabled=true then Timer1.Enabled:=False;
end;
procedure TFEmpleados.FormCreate(Sender: TObject);
//------------------------------------------------------------------------------
//***************************************************[ Al Crearse el Fom ]******
// Cosas que queremos que haga según se inicie el Form
//------------------------------------------------------------------------------
begin
IBT:=DM.IBTransaction1; // Aquí especificar el modulo y el IBTransaction a usar
//[ 5]----------------------------[ Tabs de page control en color ]-------------
Datos.Color:=clMoneyGreen; //verde pastel
Persona.Color:=clSkyBlue; //Azul Pastel
Notas.Color:=clInfoBk; //Amarillo pastel
//[ 5]----------------------------[ Tabs de page control en color ]-------------
{Cosas que queremos que haga según se inicie el Form}
PC.ActivePageIndex:=0;
end;
procedure TFEmpleados.FormKeyPress(Sender: TObject; var Key: Char);
//------------------------------------------------------------------------------
//************************************************[ Al pulsar una tecla ]******
// Al pulsar la tecla salta al foco del siguiente componente, si esta admitido
//------------------------------------------------------------------------------
begin
if (Key = #13) then {Si se ha pulsado enter }
if (ActiveControl is TEdit)
or (ActiveControl is TDBEdit)
or (ActiveControl is TDBIBCheckbox)
or (ActiveControl is TDBComboBox) then
begin
Key := #0; { anula la puulsación }
Perform(WM_NEXTDLGCTL, 0, 0); { mueve al próximo control }
end
end;
procedure TFEmpleados.FormPaint(Sender: TObject);
//------------------------------------------------------------------------------
//***************************************************************[ OnPaint ]****
//------------------------------------------------------------------------------
begin
if DBIBChecBoxAgente.Font.Style=[] then DBIBChecBoxAgente.Font.Style:=[fsBold];
end;
procedure TFEmpleados.FormShow(Sender: TObject);
//------------------------------------------------------------------------------
//****************************************************************[ OnShow ]****
// Al mostrarse
//------------------------------------------------------------------------------
begin
if DBNCODIGO.Text<>'' then
begin
ActQuery(DM.IBQPersonasContacto,' SELECT * FROM PC WHERE (PC.MODULO = '+QuotedStr('EMPLEADOS')+
') AND (PC.CODIGO = '+QuotedStr(DsPrincipal.DataSet.FieldByName('CODIGO').value)+')');
ActQuery(DM.IBQNOTAS,'SELECT * FROM NOTAS WHERE (NOTAS.NOMBREMODULO = '+QuotedStr('EMPLEADOS')+
') AND (NOTAS.CODIGO = '+QuotedStr(DsPrincipal.DataSet.FieldByName('CODIGO').value)+')');
end;
if Nivel>=8 then //Si es un usario de nivel 8 o superios
begin
Label16.Visible:=True;
DBNSalario.Visible:=True;
end else
begin //en este caso si es usuario nivel 7 que es con el que más bajo podemos entrar
Label16.Visible:=False;
DBNSalario.Visible:=False;
end
end;
procedure TFEmpleados.PCDrawTab(Control: TCustomTabControl; TabIndex: Integer;
const Rect: TRect; Active: Boolean);
//------------------------------------------------------------------------------
//************************************************[ COLORES PAGECONTROL ]*******
//------------------------------------------------------------------------------
var
//[ 6]----------------[ Para poder tener tabs del page control en color]--------
AText: string;
APoint: TPoint;
//[ 6]--FIN SECCIÓN---[ Para poder tener tabs del page control en color]--------
begin
//[ 7]----------------[ Para poder tener tabs del page control en color]--------
with (Control as TPageControl).Canvas do
begin
case TabIndex of
0: brush.Color:=clMoneyGreen;
1: brush.Color:=clSkyBlue;
2: brush.Color:=clInfoBk;
end;
PC.Canvas.Rectangle(Rect);
PC.Canvas.Brush.Color:=Control.Canvas.Brush.Color;
PC.Pages[TabIndex].brush.Color := Control.Canvas.brush.Color;
PC.Pages[TabIndex].Repaint;
FillRect(Rect);
AText := TPageControl(Control).Pages[TabIndex].Caption;
with Control.Canvas do
begin
APoint.x := (Rect.Right - Rect.Left) div 2 - TextWidth(AText) div 2;
APoint.y := (Rect.Bottom - Rect.Top) div 2 - TextHeight(AText) div 2;
TextRect(Rect, Rect.Left + APoint.x, Rect.Top + APoint.y, AText);
end;
end;
//[ 7]--FIN SECCIÓN---[ Para poder tener tabs del page control en color]--------
end;
procedure TFEmpleados.SBBCDatosClick(Sender: TObject);
//------------------------------------------------------------------------------
//*****************************************************************[ Datos ]****
//------------------------------------------------------------------------------
begin
CambiarPagina(0,Sender);
end;
procedure TFEmpleados.SbBorrarClick(Sender: TObject);
//------------------------------------------------------------------------------
//*******************************************[ Borrar el Actual Registro ]******
//------------------------------------------------------------------------------
begin //Cambiar por el mensaje elegido
if (MessageBox(0, '¿Esta seguro de eliminar el registro actual?',
'Eliminar Registro', MB_ICONSTOP or MB_YESNO or MB_DEFBUTTON2) = ID_No) then abort
else begin
DSPrincipal.DataSet.Delete;
ShowMessage('El registro ha sido eliminado');
IBT.CommitRetaining;
end;
end;
procedure TFEmpleados.SBBuscarClick(Sender: TObject);
//------------------------------------------------------------------------------
//******************************************************[ Abrir Busqueda ]******
//------------------------------------------------------------------------------
begin
GBBuscar.Visible:=True;
Ebusqueda.SetFocus;
end;
procedure TFEmpleados.SBCancelarClick(Sender: TObject);
//------------------------------------------------------------------------------
//*****************************************************[ Cancelar Proceso]******
//------------------------------------------------------------------------------
begin
DSPrincipal.DataSet.Cancel;
IBT.RollbackRetaining; //Donde IBT es el nombre de su Ibtrasaction, con ruta
end;
procedure TFEmpleados.AddCabeceraMemo(Tipo: Integer);
//------------------------------------------------------------------------------
//*******************************************************[ AddCabeceraMemo ]****
// Crea las cabeceras de nuestro memo invisible
//------------------------------------------------------------------------------
begin
case Tipo of
0:begin
Memo1.Lines.Add('-----------------------------------------------------------------------------------------------------------------------------------');
Memo1.Lines.Add(' NUEVO REGISTRO Fecha: [ '+DateToStr(Now)+' ] Hora: [ '+TimeToStr(Now)+' ] Empleado: [ '+Usuario+' ]');
Memo1.Lines.Add('-----------------------------------------------------------------------------------------------------------------------------------');
end;
1:begin
Memo1.Lines.Add('-----------------------------------------------------------------------------------------------------------------------------------');
Memo1.Lines.Add(' NUEVO REGISTRO * Fecha: [ '+DateToStr(Now)+' ] Hora: [ '+TimeToStr(Now)+' ] Empleado: [ '+Usuario+' ]');
Memo1.Lines.Add('-----------------------------------------------------------------------------------------------------------------------------------');
end;
2:begin
Memo1.Lines.Add(''); //Linea en blanco
Memo1.Lines.Add('-----------------------------------------------------------------------------------------------------------------------------------');
Memo1.Lines.Add(' Modificación del registro Fecha: [ '+DateToStr(Now)+' ] Hora: [ '+TimeToStr(Now)+' ] Empleado: [ '+Usuario+' ]');
Memo1.Lines.Add(''); //Linea en blanco
end;
end;
end;
procedure TFEmpleados.SBConfirmarClick(Sender: TObject);
//------------------------------------------------------------------------------
//********************************************************[ Grabar datos ]******
//------------------------------------------------------------------------------
var VarBNuevo, VarBModi:Boolean;
VarSModulo, VarsAgente2:string;
begin
VarSModulo:='EMPLEADOS';
VarBModi:=False;
try
if DsPrincipal.DataSet.State in [dsInsert] then VarBNuevo:=True
else VarBNuevo:=false;
if (DBNCODIGO.Text<>'') and (DBNNombre.Text<>'') and (DBNFechaAlta.Text<>'') and (DBNPuesto.Text<>'') then
begin
DSPrincipal.DataSet.Post;
Memo1.Lines.Clear; //Este memo tiene el visible:=False; por lo que no se vera en la imagen del módulo
//Empesamos con algo nuevo el control de l historico, al crearse y cada vez que se modifique un dato, lo registrara
if VarBNuevo then //Si es nuevo
begin
AddCabeceraMemo(0);
DSNotas2.DataSet.Insert; //creamos directamente el campo historico
//No me explico por que pero si pongo sólo un umodo no se graba el dato
DSNotas2.DataSet.FieldByName('CODIGO').Value:=DBNCODIGO.Text;
DSNotas2.DataSet.FieldByName('NOMBREMODULO').Value:='EMPLEADOS';
DSNotas2.DataSet.FieldByName('DESCRIPCION').Value:='Historico';
DSNotas2.DataSet.FieldByName('NOTAS').Value:=Memo1.Lines.Text;
DSNotas2.DataSet.Post;
end else
begin //Si es una modificación
if DSNotas2.DataSet.locate('NOMBREMODULO;CODIGO;DESCRIPCION',
VarArrayOf([VarSNomMod,DBNCODIGO.Text,'Historico']),[loCaseInsensitive,loPartialKey])=false then
begin //Si no lo encuntra, por que ha sido borrado, o se ha modificado el código, lo crea nuevamente con un *
//para diferenciarlo del original
AddCabeceraMemo(1);
DSNotas2.DataSet.Edit;
DSNotas2.DataSet.FieldByName('CODIGO').Value:=DBNCODIGO.Text;
DSNotas2.DataSet.FieldByName('NOMBREMODULO').Value:='EMPLEADOS';
DSNotas2.DataSet.FieldByName('DESCRIPCION').Value:='Historico';
DSNotas2.DataSet.FieldByName('NOTAS').Value:=Memo1.Lines.Text;
DSNotas2.DataSet.Post;
Memo1.Lines.Clear;
//Volvemos a poscionar el registro
DSNotas2.DataSet.locate('NOMBREMODULO;CODIGO;DESCRIPCION',VarArrayOf([VarSNomMod,DBNCODIGO.Text,'Historico']),[loCaseInsensitive,loPartialKey]);
end;
Memo1.Lines.Text:=DSNotas2.DataSet.FieldByName('NOTAS').AsString; //Cargamos todo el texto
//Comprobamos las modificaciones
if VarSHCodigo<>DBNCODIGO.Field.Value then //El código
begin
VarBModi:=true;
AddCabeceraMemo(2);
Memo1.Lines.Add('Campo Código, se modifico '+VarSHCodigo+' por '+ DBNCODIGO.Text);
End;
if VarSHNombre<>DBNNombre.Field.Value then //Nombre
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Nombre, se modifico '+VarSHNombre+' por '+ DBNNombre.Text);
End;
if VarSHCIF<>DBNCIF.Field.Value then //Número de documento identificativo
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Documento identidficativo, se modifico '+VarSHCIF+' por '+ DBNCIF.Text);
End;
if VarsHNSS<>DBNNSS.Field.Value then //Número de Seguridad Social
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Número Seguridad Social, se modifico '+VarsHNSS+' por '+ DBNNSS.Text);
End;
if VarSHPuesto<>DBNPuesto.Field.Value then //Puesto de trabajo
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Puesto, se modifico '+VarSHPuesto+' por '+ DBNPuesto.Text);
End;
if DBIBChecBoxAgente.Checked then VarSAgente2:='S' //Comprovamos si sigue igual
else VarSAgente2:='N';
if VarSAgente<>VarsAgente2 then //Es agente o comercial
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Agente, se modifico '+VarSAgente+' por '+ VarsAgente2);
End;
if VarFHSalario<>DBNSalario.Field.Value then //Salario
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Salario, se modifico '+FloatToStr(VarFHSalario)+' por '+ DBNSalario.Text);
End;
if VarFHMEdia<>DBNMedia.Field.Value then //MEdia
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Media, se modifico '+FloatToStr(VarFHMEdia)+' por '+ DBNMedia.Text);
End;
if VarFHDto1<>DBNDTO1.Field.Value then //Dto Comision 1
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Dto Comision 1, se modifico '+FloatToStr(VarFHDto1)+' por '+ DBNDTO1.Text);
End;
if VarFHDto2<>DBNDTO1.Field.Value then //Dto Comision 2
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Dto Comision 2, se modifico '+FloatToStr(VarFHDto2)+' por '+ DBNDTO2.Text);
End;
if VarFHDto3<>DBNDTO1.Field.Value then //Dto Comision 3
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Dto Comision 3, se modifico '+FloatToStr(VarFHDto3)+' por '+ DBNDTO3.Text);
End;
if VarFHDto4<>DBNDTO1.Field.Value then //Dto Comision 4
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Dto Comision 4, se modifico '+FloatToStr(VarFHDto4)+' por '+ DBNDTO4.Text);
End;
if VarFHDto5<>DBNDTO1.Field.Value then //Dto Comision 5
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Dto Comision 5, se modifico '+FloatToStr(VarFHDto5)+' por '+ DBNDTO5.Text);
End;
if VarDHFAalta<>DBNFechaAlta.Field.Value then //Fecha de alta
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Fecha de alta, se modifico '+DateToStr(VarDHFAalta)+' por '+ DBNFechaAlta.Text);
End;
if VarDHFBaja<>DBNFechaBaja.Field.Value then //Fecha de baja
begin
if VarBModi=false then
begin
VarBModi:=true;
AddCabeceraMemo(2);
end;
Memo1.Lines.Add('Campo Fecha de baja, se modifico '+DateToStr(VarDHFBaja)+' por '+ DBNFechaBaja.Text);
End;
if VarBModi then
begin
Memo1.Lines.Add('-----------------------------------------------------------------------------------------------------------------------------------');
DSNotas2.DataSet.Edit; //YA esta pocionado por el locate
DSNotas2.DataSet.FieldByName('NOTAS').Value:=Memo1.Lines.Text;
DSNotas2.DataSet.Post;
end;
end;
IBT.CommitRetaining;
end else ShowMessage('Debe rellenar ComObject mínimo los campos Código, Nombre, Fecha de alta y Puesto, para poder grabar los datos');
except
on E: Exception do
begin
MessageBeep(1000);
ShowMessage('Se ha producido un error y el proceso no se ha podido terminar Unidad:[ UEmpleados ] Modulo:[ Grabar ]' + Chr(13) + Chr(13)
+ 'Clase de error: ' + E.ClassName + Chr(13) + Chr(13)
+ 'Mensaje del error:' + E.Message+Chr(13) + Chr(13)
+ ' '+Chr(13) + Chr(13)
+ 'El proceso ha quedado interrumpido');
DSPrincipal.DataSet.Cancel;
IBT.RollbackRetaining; //Donde IBT es el nombre de su Ibtrasaction, con ruta
end;
end;
end;
procedure TFEmpleados.SBImprimirClick(Sender: TObject);
//------------------------------------------------------------------------------
//******************************************************[ Abrir Imprimir ]******
//------------------------------------------------------------------------------
begin
GBImprimir.Visible:=True;
end;
procedure TFEmpleados.SBMas1Click(Sender: TObject);
//------------------------------------------------------------------------------
//*************************************************[ Avanzar un registro ]******
//------------------------------------------------------------------------------
begin
DSPrincipal.DataSet.Next;
end;
procedure TFEmpleados.SBMasXClick(Sender: TObject);
//------------------------------------------------------------------------------
//*************************************************[ Avanzar x Registros ]******
//------------------------------------------------------------------------------
begin
DSPrincipal.DataSet.MoveBy(SEMobeByX.Value);
end;
procedure TFEmpleados.SBMenos1Click(Sender: TObject);
//------------------------------------------------------------------------------
//***********************************************[ Retroceder 1 registro ]******
//------------------------------------------------------------------------------
begin
DSPrincipal.DataSet.Prior;
end;
procedure TFEmpleados.SBMenosxClick(Sender: TObject);
//------------------------------------------------------------------------------
//**********************************************[ Retroceder x Registros ]******
//------------------------------------------------------------------------------
begin
DSPrincipal.DataSet.MoveBy(-SEMobeByX.Value);
end;
procedure TFEmpleados.SbModificarClick(Sender: TObject);
//------------------------------------------------------------------------------
//*******************************************[ Editar el actual registro ]******
//------------------------------------------------------------------------------
begin
if DsPrincipal.DataSet.IsEmpty<>true then
begin
DSPrincipal.DataSet.Edit;
PC.ActivePageIndex:=0;
//Cargamos los datos para controloar el historico
VarSHCodigo:=DBNCODIGO.Field.Value;
VarSHNombre:=DBNNombre.Field.Value;
VarsHNSS:=DBNNSS.Field.Value;
VarSHCIF:=DBNCIF.Field.Value;
VarSHPuesto:=DBNPuesto.Field.Value;
if DBIBChecBoxAgente.Checked then VarSAgente:='S'
else VarSAgente:='N';
VarFHSalario:=DBNSalario.Field.Value;
VarFHMEdia:=DBNMedia.Field.Value;
VarFHDto1:=DBNDTO1.Field.Value;
VarFHDto2:=DBNDTO2.Field.Value;
VarFHDto3:=DBNDTO3.Field.Value;
VarFHDto4:=DBNDTO4.Field.Value;
VarFHDto5:=DBNDTO5.Field.Value;
VarDHFAalta:=DBNFechaAlta.Field.Value;
VarDHFBaja:=DBNFechaBaja.Field.Value;
DBNCODIGO.setfocus;
end else ShowMessage('No hay tregistros disponibles para editar')
end;
procedure TFEmpleados.SbNuevoClick(Sender: TObject);
//------------------------------------------------------------------------------
//*******************************************[ Creamos un nuevo registro ]******
//------------------------------------------------------------------------------
begin
DSPrincipal.DataSet.Insert;
PC.ActivePageIndex:=0;
DBNCODIGO.SetFocus;
end;
procedure TFEmpleados.SBPrimeroClick(Sender: TObject);
//------------------------------------------------------------------------------
//***********************************************[ Ir al Primer Registro ]******
//------------------------------------------------------------------------------
begin
DSPrincipal.DataSet.First;
end;
procedure TFEmpleados.SBUltimoClick(Sender: TObject);
//------------------------------------------------------------------------------
//***********************************************[ Ir al último registro ]******
//------------------------------------------------------------------------------
begin
DSPrincipal.DataSet.Last;
end;
procedure TFEmpleados.SB_SalirClick(Sender: TObject);
//------------------------------------------------------------------------------
//******************************************************[ Salir Del Form ]******
//------------------------------------------------------------------------------
begin
FEmpleados.Close;
end;
procedure TFEmpleados.SPBCModificaPCClick(Sender: TObject);
//------------------------------------------------------------------------------
//**********************************************************[ Modificar PC ]****
//------------------------------------------------------------------------------
begin
CargaDatos(1,false,'Persona de contacto',Sender);
end;
procedure TFEmpleados.SPBCModificarNotaClick(Sender: TObject);
//------------------------------------------------------------------------------
//********************************************************[ Modificar Nota ]****
//------------------------------------------------------------------------------
begin
CargaDatos(0,False,'Nota',Sender);
end;
procedure TFEmpleados.SPBCNOtasClick(Sender: TObject);
//------------------------------------------------------------------------------
//*****************************************************************[ Notas ]****
//------------------------------------------------------------------------------
begin
CambiarPagina(2,Sender);
end;
procedure TFEmpleados.SPBCNuevaNotaClick(Sender: TObject);
//------------------------------------------------------------------------------
//************************************************************[ Nueva Nota ]****
//------------------------------------------------------------------------------
begin
CargaDatos(0,True,'Nota',Sender);
end;
procedure TFEmpleados.SPBCNuevaPCClick(Sender: TObject);
//------------------------------------------------------------------------------
//**************************************************************[ Nueva PC ]****
//------------------------------------------------------------------------------
begin
CargaDatos(1,True,'Persona de contacto',Sender);
end;
procedure TFEmpleados.SPBCPersonaContactoClick(Sender: TObject);
//------------------------------------------------------------------------------
//***************************************************[ Persona de contacto ]****
//------------------------------------------------------------------------------
begin
CambiarPagina(1,Sender);
end;
procedure TFEmpleados.SpeedButtonBC1Click(Sender: TObject);
//------------------------------------------------------------------------------
//********************************************************[ Ver Comisiones ]****
// A falta de la tabla comisiones
//------------------------------------------------------------------------------
begin
if DBIBChecBoxAgente.Checked then
begin
//Si es agente abrimos el módulo de comisiones, para ver las comisiones de este agente o comercial
//Tenemos que poner un ACtIBDataSet para asegurarnos de que sólo se vea las de este empleado
end;
end;
procedure TFEmpleados.Timer1Timer(Sender: TObject);
//------------------------------------------------------------------------------
//*************************************************[ El evento del Timer ]******
//------------------------------------------------------------------------------
begin
SBBarraStatus.Panels[2].Text:=TimeToStr(now);
if SBBarraStatus.Panels[1].Text<>DateToStr(Now) then SBBarraStatus.Panels[1].Text:=DateToStr(Now);
end;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment