unit procesos;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Grids, Vcl.DBGrids,
  Data.DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, Vcl.StdCtrls,
  Vcl.DBCtrls;

type
  Tfprocesos = class(TForm)
    Panel3: TPanel;
    Panel1: TPanel;
    dsqprocesos: TDataSource;
    qprocesos: TZQuery;
    DBGrid2: TDBGrid;
    Panel2: TPanel;
    BtCNuevo: TButton;
    BtCborrar: TButton;
    btCmodificar: TButton;
    BtCguardar: TButton;
    BtCcancelar: TButton;
    qaux: TZQuery;
    dsqalmacenes: TDataSource;
    qalmacenes: TZReadOnlyQuery;
    qalmacenesid: TIntegerField;
    qalmacenesdescripcion: TWideStringField;
    qprocesosid: TIntegerField;
    qprocesosidal: TIntegerField;
    qprocesosdescripcion_almacen: TWideStringField;
    qprocesosdescripcion: TWideStringField;
    DBLookupComboBox1: TDBLookupComboBox;
    procedure FormShow(Sender: TObject);
    procedure dsqprocesosStateChange(Sender: TObject);
    procedure BtCNuevoClick(Sender: TObject);
    procedure BtCborrarClick(Sender: TObject);
    procedure btCmodificarClick(Sender: TObject);
    procedure BtCguardarClick(Sender: TObject);
    procedure BtCcancelarClick(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure qprocesosBeforePost(DataSet: TDataSet);
    procedure qprocesosBeforeDelete(DataSet: TDataSet);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure DBGrid2ColExit(Sender: TObject);
    procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid2TitleClick(Column: TColumn);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fprocesos: Tfprocesos;

implementation

{$R *.dfm}

uses datos;

procedure Tfprocesos.BtCborrarClick(Sender: TObject);
begin
  qprocesos.Delete;
end;

procedure Tfprocesos.BtCcancelarClick(Sender: TObject);
begin
  qprocesos.cancel;
  dbgrid2.ReadOnly:=true;

end;

procedure Tfprocesos.BtCguardarClick(Sender: TObject);
begin
    if qprocesos.State in [dsinsert,dsedit] then qprocesos.Post;
    dbgrid2.ReadOnly:=true;

end;

procedure Tfprocesos.btCmodificarClick(Sender: TObject);
begin
    qprocesos.Edit;
    dbgrid2.ReadOnly:=false;
    dbgrid2.SetFocus;

end;

procedure Tfprocesos.BtCNuevoClick(Sender: TObject);
begin
    qaux.sql.Clear;
    qaux.sql.add('select max(id)+1 from procesos');
    qaux.Open;
    qprocesos.Append;
    qprocesosid.AsInteger:=qaux.Fields[0].AsInteger;
    dbgrid2.ReadOnly:=false;
    dbgrid2.SetFocus;
end;

procedure Tfprocesos.DBGrid2ColExit(Sender: TObject);
begin
     if qprocesos.State in [dsinsert,dsedit] then
     begin
       qprocesosidal.Value:=qalmacenesid.asinteger;
     end else
     begin
     end;
end;

procedure Tfprocesos.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  DrawState,imgindex,bmpwidth: Integer;
  DrawRect: TRect;
begin

  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = DBLookupComboBox1.DataField) then
    with DBLookupComboBox1 do
    begin
      Left := Rect.Left + DBGrid2.Left + 2;
      Top := Rect.Top + DBGrid2.Top + 2;
      Width := Rect.Right - Rect.Left;
      Width := Rect.Right - Rect.Left;
      Height := Rect.Bottom - Rect.Top;
      Visible := True;
    end else DBLookupComboBox1.Visible:=false;
  end;

end;

procedure Tfprocesos.DBGrid2TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=qprocesos.SortType;
  qprocesos.SortedFields:=Column.FieldName;
  If st = stAscending then qprocesos.SortType:=stDescending else qprocesos.SortType:=stAscending;
  dsqprocesos.DataSet.First;

end;

procedure Tfprocesos.dsqprocesosStateChange(Sender: TObject);
begin
    if qprocesos.State in [dsedit,dsinsert] then
    begin
       btCnuevo.enabled:=false;
       btCborrar.enabled:=false;
       btCmodificar.enabled:=false;
       btCguardar.enabled:=true;
       btCcancelar.enabled:=true;
    end;
    if qprocesos.State in [dsbrowse] then
    begin
       btCnuevo.enabled:=true;
       btCborrar.enabled:=true;
       btCmodificar.enabled:=true;
       btCguardar.enabled:=false;
       btCcancelar.enabled:=false;
    end;

end;

procedure Tfprocesos.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then  Key :=9;
    end;
end;

procedure Tfprocesos.FormKeyPress(Sender: TObject; var Key: Char);
var formatos:tformatsettings;
punto:string;
begin
    GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatos);
    punto:=formatos.DecimalSeparator;
    if punto=',' then
    begin
        key:=upcase(key);
        if (key='.') and (activecontrol is tdbgrid) then
        begin
            key:=',';
        end;
    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;
end;


procedure Tfprocesos.FormShow(Sender: TObject);
begin
    qprocesos.Open;
    qalmacenes.Open;
end;

procedure Tfprocesos.qprocesosBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('¿Confirma que desea borrar este proceso?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure Tfprocesos.qprocesosBeforePost(DataSet: TDataSet);
var x:integer;
begin
    qprocesosidal.Value:=qalmacenesid.AsInteger;
    if qprocesos.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea dar de alta este proceso?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar este proceso?',true,true,true);
    case x of
        mrno: begin
                 qprocesos.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 abort;
                 END;

    end;
end;

end.
