unit fusuarios;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.DBCtrls, Vcl.StdCtrls, Vcl.ExtCtrls,
  Data.DB, ZDataset, ZAbstractRODataset, ZAbstractDataset, Vcl.Grids,
  Vcl.DBGrids;

type
  Tusuarios = class(TForm)
    DBGrid1: TDBGrid;
    dsqusuarios: TDataSource;
    qusuarios: TZQuery;
    qtrabajadores: TZReadOnlyQuery;
    qgrupos: TZReadOnlyQuery;
    dsqtrabajadores: TDataSource;
    dsqgrupos: TDataSource;
    qusuariosid: TIntegerField;
    qusuariosnombre: TWideStringField;
    qusuariosnif: TWideStringField;
    qusuariosempresa: TIntegerField;
    qusuariosdireccion: TWideStringField;
    qusuariosprovin: TWideStringField;
    qusuarioscity: TWideStringField;
    qusuarioscp: TWideStringField;
    qusuariosphone: TWideStringField;
    qusuariosmovil: TWideStringField;
    qusuariosusuario: TWideStringField;
    qusuarioscontra: TWideStringField;
    qusuariosadministrador: TIntegerField;
    qusuariosgestorgrupo: TIntegerField;
    qusuariosgrupo: TIntegerField;
    qusuariosgestorindividual: TIntegerField;
    qusuariosidemp: TIntegerField;
    qusuariosactive: TIntegerField;
    qmaxusuario: TZReadOnlyQuery;
    Panel7: TPanel;
    btAcancelar: TButton;
    btAmodificar: TButton;
    btAborrar: TButton;
    btAnuevo: TButton;
    btAguardar: TButton;
    combotrabajadores: TDBLookupComboBox;
    combogrupos: TDBLookupComboBox;
    qusuariosnomgrupo: TWideStringField;
    qusuariosnomtrabajador: TWideStringField;
    gcrpagado: TDBCheckBox;
    qgruposide: TIntegerField;
    qgruposid: TIntegerField;
    qgruposdescripcion: TWideStringField;
    qtrabajadoreside: TIntegerField;
    qtrabajadoresid: TSmallintField;
    qtrabajadoresnif: TWideStringField;
    qtrabajadoresnombre: TWideStringField;
    qtrabajadoresresponsable: TIntegerField;
    qtrabajadoresfumigador: TIntegerField;
    qmaxusuarioid: TLargeintField;
    qusuariosfumigador: TIntegerField;
    qusuariostecnico: TIntegerField;
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure btAnuevoClick(Sender: TObject);
    procedure btAborrarClick(Sender: TObject);
    procedure btAmodificarClick(Sender: TObject);
    procedure btAguardarClick(Sender: TObject);
    procedure btAcancelarClick(Sender: TObject);
    procedure qusuariosBeforePost(DataSet: TDataSet);
    procedure qusuariosAfterInsert(DataSet: TDataSet);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  usuarios: Tusuarios;
const
  rojo = $00AAAAFF;
  amarillo = $00B9FFFF;
  verde = $00C7FBAA;
  azul = $00FFFFBB;
implementation

{$R *.dfm}


procedure Tusuarios.btAborrarClick(Sender: TObject);
begin
  qusuarios.Delete;
end;

procedure Tusuarios.btAcancelarClick(Sender: TObject);
begin
  qusuarios.Cancel;
end;

procedure Tusuarios.btAguardarClick(Sender: TObject);
begin
  qusuarios.Post;
end;

procedure Tusuarios.btAmodificarClick(Sender: TObject);
begin
  qusuarios.Edit;
end;

procedure Tusuarios.btAnuevoClick(Sender: TObject);
begin
  dbgrid1.SetFocus;
  qusuarios.Append;

end;

procedure Tusuarios.DBGrid1CellClick(Column: TColumn);
begin
    if column.Field.FieldName ='fumigador' then
    begin
        if qusuariosfumigador.asinteger=1 then
         begin
           qusuarios.Edit;
           qusuariosfumigador.Value:=0;
           qusuarios.Post;
         end else
               begin
                 qusuarios.Edit;
                 qusuariosfumigador.Value:=1;
                 qusuarios.Post;
                 qusuarios.Refresh;
                 dbgrid1.SelectedIndex:=1;
               end;
    end;
    if column.Field.FieldName ='tecnico' then
    begin
        if qusuariostecnico.asinteger=1 then
         begin
           qusuarios.Edit;
           qusuariostecnico.Value:=0;
           qusuarios.Post;
         end else
               begin
                 qusuarios.Edit;
                 qusuariostecnico.Value:=1;
                 qusuarios.Post;
                 qusuarios.Refresh;
                 dbgrid1.SelectedIndex:=1;
               end;
    end;
    if column.Field.FieldName ='active' then
    begin
        if qusuariosactive.asinteger=1 then
         begin
           qusuarios.Edit;
           qusuariosactive.Value:=0;
           qusuarios.Post;
         end else
               begin
                 qusuarios.Edit;
                 qusuariosactive.Value:=1;
                 qusuarios.Post;
                 qusuarios.Refresh;
                 dbgrid1.SelectedIndex:=1;
               end;
    end;
    if column.Field.FieldName ='gestorindividual' then
    begin
        if qusuariosgestorindividual.asinteger=1 then
         begin
           qusuarios.Edit;
           qusuariosgestorindividual.Value:=0;
           qusuarios.Post;
         end else
               begin
                 qusuarios.Edit;
                 qusuariosgestorindividual.Value:=1;
                 qusuarios.Post;
                 qusuarios.Refresh;
                 dbgrid1.SelectedIndex:=1;
               end;
    end;
    if column.Field.FieldName ='gestorgrupo' then
    begin
        if qusuariosgestorgrupo.asinteger=1 then
         begin
           qusuarios.Edit;
           qusuariosgestorgrupo.Value:=0;
           qusuarios.Post;
         end else
               begin
                 qusuarios.Edit;
                 qusuariosgestorgrupo.Value:=1;
                 qusuarios.Post;
                 qusuarios.Refresh;
                 dbgrid1.SelectedIndex:=1;
               end;
    end;
    if column.Field.FieldName ='administrador' then
    begin
        if qusuariosadministrador.asinteger=1 then
         begin
           qusuarios.Edit;
           qusuariosadministrador.Value:=0;
           qusuarios.Post;
         end else
               begin
                 qusuarios.Edit;
                 qusuariosadministrador.Value:=1;
                 qusuarios.Post;
                 qusuarios.Refresh;
                 dbgrid1.SelectedIndex:=1;
               end;
    end;
  dbgrid1.SelectedIndex:=1;
end;

procedure Tusuarios.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const IsChecked : array[Boolean] of Integer =
 (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var
  DrawState,imgindex,bmpwidth: Integer;
  DrawRect: TRect;
begin
    if (qusuariosactive.Asinteger=0)then
    begin
        DBGrid1.Canvas.brush.Color := rojo;
    end else DBGrid1.Canvas.brush.Color := verde;
    DBgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
if (gdFocused in State) then
begin

    if (Column.Field.FieldName = 'fumigador') then
     begin
       gcrpagado.Left := Rect.Left + DBgrid1.Left + 2;
       gcrpagado.Top := Rect.Top + DBgrid1.top + 2;
       gcrpagado.Width := Rect.Right - Rect.Left;
       gcrpagado.Height := Rect.Bottom - Rect.Top;
       gcrpagado.Visible := True;
     end;
end else
     begin

       if (Column.Field.FieldName = 'fumigador') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
         DBgrid1.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid1.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
       end;
    end;
if (gdFocused in State) then
begin

    if (Column.Field.FieldName = 'tecnico') then
     begin
       gcrpagado.Left := Rect.Left + DBgrid1.Left + 2;
       gcrpagado.Top := Rect.Top + DBgrid1.top + 2;
       gcrpagado.Width := Rect.Right - Rect.Left;
       gcrpagado.Height := Rect.Bottom - Rect.Top;
       gcrpagado.Visible := True;
     end;
end else
     begin

       if (Column.Field.FieldName = 'tecnico') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
         DBgrid1.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid1.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
       end;
    end;


if (gdFocused in State) then
begin

    if (Column.Field.FieldName = 'active') then
     begin
       gcrpagado.Left := Rect.Left + DBgrid1.Left + 2;
       gcrpagado.Top := Rect.Top + DBgrid1.top + 2;
       gcrpagado.Width := Rect.Right - Rect.Left;
       gcrpagado.Height := Rect.Bottom - Rect.Top;
       gcrpagado.Visible := True;
     end;
end else
     begin

       if (Column.Field.FieldName = 'active') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
         DBgrid1.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid1.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
       end;
    end;
if (gdFocused in State) then
begin

    if (Column.Field.FieldName = 'gestorindividual') then
     begin
       gcrpagado.Left := Rect.Left + DBgrid1.Left + 2;
       gcrpagado.Top := Rect.Top + DBgrid1.top + 2;
       gcrpagado.Width := Rect.Right - Rect.Left;
       gcrpagado.Height := Rect.Bottom - Rect.Top;
       gcrpagado.Visible := True;
     end;
end else
     begin

       if (Column.Field.FieldName = 'gestorindividual') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
         DBgrid1.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid1.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
       end;
    end;
if (gdFocused in State) then
begin

    if (Column.Field.FieldName = 'gestorgrupo') then
     begin
       gcrpagado.Left := Rect.Left + DBgrid1.Left + 2;
       gcrpagado.Top := Rect.Top + DBgrid1.top + 2;
       gcrpagado.Width := Rect.Right - Rect.Left;
       gcrpagado.Height := Rect.Bottom - Rect.Top;
       gcrpagado.Visible := True;
     end;
end else
     begin

       if (Column.Field.FieldName = 'gestorgrupo') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
         DBgrid1.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid1.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
       end;
    end;
if (gdFocused in State) then
begin

    if (Column.Field.FieldName = 'administrador') then
     begin
       gcrpagado.Left := Rect.Left + DBgrid1.Left + 2;
       gcrpagado.Top := Rect.Top + DBgrid1.top + 2;
       gcrpagado.Width := Rect.Right - Rect.Left;
       gcrpagado.Height := Rect.Bottom - Rect.Top;
       gcrpagado.Visible := True;
     end;
end else
     begin

       if (Column.Field.FieldName = 'administrador') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
         DBgrid1.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid1.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
       end;
    end;
  gcrpagado.visible:=false;
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = combogrupos.DataField) then
    with combogrupos do
    begin
      Left := Rect.Left + DBgrid1.Left + 2;
      Top := Rect.Top + DBgrid1.Top + 2;
      Width := Rect.Right - Rect.Left;
      Width := Rect.Right - Rect.Left;
      Height := Rect.Bottom - Rect.Top;
      Visible := True;
      setfocus;
      dropdown;
    end else combogrupos.Visible:=false;
    if (Column.Field.FieldName = combotrabajadores.DataField) then
    with combotrabajadores do
    begin
      Left := Rect.Left + DBgrid1.Left + 2;
      Top := Rect.Top + DBgrid1.Top + 2;
      Width := Rect.Right - Rect.Left;
      Width := Rect.Right - Rect.Left;
      Height := Rect.Bottom - Rect.Top;
      Visible := True;
      setfocus;
      dropdown;
    end else combotrabajadores.Visible:=false;

  end;
end;

procedure Tusuarios.FormKeyPress(Sender: TObject; var Key: Char);
begin
   key:=upcase(key);
    if (key='.') and (activecontrol is tdbgrid) then
    begin
        key:=','
    end;
    if (activecontrol is tdbgrid) then
    begin
        if Key = #13 then Key :=#9;
    end;

    if (key=#13) then
    begin
        Perform(WM_NextDLGCtl,0,0);
        key:=#0;
    end;
// si presionamos ESC
    if (key=#$1B)  and (activecontrol is tdblookupcombobox )then
    begin
      activecontrol.Visible:=false;
    end;
end;

procedure Tusuarios.FormShow(Sender: TObject);
begin
  qtrabajadores.Open;
  qgrupos.Open;
  qusuarios.Open;
end;

procedure Tusuarios.qusuariosAfterInsert(DataSet: TDataSet);
begin
  qmaxusuario.Close;
  qmaxusuario.Open;
  qusuariosid.Value:=qmaxusuarioid.AsInteger;
end;

procedure Tusuarios.qusuariosBeforePost(DataSet: TDataSet);
begin
    qusuariosgrupo.Value:=qgruposid.AsInteger;
    qusuariosidemp.Value:=qtrabajadoresid.AsInteger;
    qusuariosnif.Value:=qtrabajadoresnif.AsString;
    qusuariosnombre.Value:=qtrabajadoresnombre.AsString;
end;

end.
