unit fcontrolcalidad;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ZAbstractDataset, ZDataset, Data.DB,
  ZAbstractRODataset, Vcl.DBCtrls, Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids,
  Vcl.ExtCtrls;

type
  Tcontrolcalidad = class(TForm)
    Panel3: TPanel;
    Panel1: TPanel;
    DBGrid2: TDBGrid;
    Panel2: TPanel;
    BtCNuevo: TButton;
    BtCborrar: TButton;
    btCmodificar: TButton;
    BtCguardar: TButton;
    BtCcancelar: TButton;
    DBLookupComboBox1: TDBLookupComboBox;
    qalmacenes: TZReadOnlyQuery;
    dsqalmacenes: TDataSource;
    dsqcontrolcalidad: TDataSource;
    qcontrolcalidad: TZQuery;
    qaux: TZQuery;
    qalmacenesid: TIntegerField;
    qalmacenesdescripcion: TWideStringField;
    qcontrolcalidadid: TIntegerField;
    qcontrolcalidadidal: TIntegerField;
    qcontrolcalidaddescripcion_almacen: TWideStringField;
    qcontrolcalidaddescripcion: TWideStringField;
    procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure BtCNuevoClick(Sender: TObject);
    procedure btCmodificarClick(Sender: TObject);
    procedure BtCborrarClick(Sender: TObject);
    procedure BtCcancelarClick(Sender: TObject);
    procedure BtCguardarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure qcontrolcalidadBeforeDelete(DataSet: TDataSet);
    procedure qcontrolcalidadBeforePost(DataSet: TDataSet);
    procedure dsqcontrolcalidadStateChange(Sender: TObject);
    procedure DBGrid2TitleClick(Column: TColumn);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  controlcalidad: Tcontrolcalidad;

implementation

{$R *.dfm}

uses datos;

procedure Tcontrolcalidad.BtCborrarClick(Sender: TObject);
begin
  qcontrolcalidad.Delete;
end;

procedure Tcontrolcalidad.BtCcancelarClick(Sender: TObject);
begin
  qcontrolcalidad.Cancel;
end;

procedure Tcontrolcalidad.BtCguardarClick(Sender: TObject);
begin
    if qcontrolcalidad.State in [dsinsert,dsedit] then qcontrolcalidad.Post;
    dbgrid2.ReadOnly:=true;
end;

procedure Tcontrolcalidad.btCmodificarClick(Sender: TObject);
begin
    qcontrolcalidad.Edit;
    dbgrid2.ReadOnly:=false;
    dbgrid2.SetFocus;
end;

procedure Tcontrolcalidad.BtCNuevoClick(Sender: TObject);
begin
    qaux.sql.Clear;
    qaux.sql.add('select max(id)+1 from controlcalidad');
    qaux.Open;
    qcontrolcalidad.Append;
    qcontrolcalidadid.AsInteger:=qaux.Fields[0].AsInteger;
    dbgrid2.ReadOnly:=false;
    dbgrid2.SetFocus;
    dbgrid2.SelectedIndex:=1;
end;

procedure Tcontrolcalidad.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 Tcontrolcalidad.DBGrid2TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=qcontrolcalidad.SortType;
  qcontrolcalidad.SortedFields:=Column.FieldName;
  If st = stAscending then qcontrolcalidad.SortType:=stDescending else qcontrolcalidad.SortType:=stAscending;
  dsqcontrolcalidad.DataSet.First;
end;

procedure Tcontrolcalidad.dsqcontrolcalidadStateChange(Sender: TObject);
begin
    if qcontrolcalidad.State in [dsedit,dsinsert] then
    begin
       btCnuevo.enabled:=false;
       btCborrar.enabled:=false;
       btCmodificar.enabled:=false;
       btCguardar.enabled:=true;
       btCcancelar.enabled:=true;
    end;
    if qcontrolcalidad.State in [dsbrowse] then
    begin
       btCnuevo.enabled:=true;
       btCborrar.enabled:=true;
       btCmodificar.enabled:=true;
       btCguardar.enabled:=false;
       btCcancelar.enabled:=false;
    end;
end;

procedure Tcontrolcalidad.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then  Key :=9;
    end;
end;

procedure Tcontrolcalidad.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 Tcontrolcalidad.FormShow(Sender: TObject);
begin
    qcontrolcalidad.Open;
    qalmacenes.Open;
end;

procedure Tcontrolcalidad.qcontrolcalidadBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('¿Confirma que desea borrar este control de calidad?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure Tcontrolcalidad.qcontrolcalidadBeforePost(DataSet: TDataSet);
var x:integer;
begin
    qcontrolcalidadidal.Value:=qalmacenesid.AsInteger;
    if qcontrolcalidad.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea dar de alta este control de calidad?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar este control de calidad?',true,true,true);
    case x of
        mrno: begin
                 qcontrolcalidad.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 abort;
                 END;

    end;
end;

end.
