unit entradasmaterial;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, Vcl.DBCtrls,
  Vcl.ComCtrls, Data.DB, ZDataset, Vcl.Grids, Vcl.DBGrids, ZAbstractRODataset,
  ZAbstractDataset, Vcl.ExtCtrls;

type
  Tfentradasmaterial = class(TForm)
    qentradas: TZQuery;
    dsqentradas: TDataSource;
    DBGrid1: TDBGrid;
    qmaterial: TZReadOnlyQuery;
    qentradasid: TIntegerField;
    qentradasfecha: TDateField;
    qentradasidmp: TWideStringField;
    qentradascantidad: TFloatField;
    qentradasstock: TFloatField;
    qentradaslote: TWideStringField;
    qmaterialid: TWideStringField;
    qmaterialdescripcion: TWideStringField;
    qmaterialobservaciones: TWideStringField;
    qmateriales_tiempo: TIntegerField;
    qentradasdescripcion: TStringField;
    Button1: TButton;
    Button2: TButton;
    qid: TZReadOnlyQuery;
    dsqmaterial: TDataSource;
    qmaterial2: TZReadOnlyQuery;
    qmaterial2id: TWideStringField;
    qmaterial2descripcion: TWideStringField;
    qmaterial2observaciones: TWideStringField;
    qmaterial2es_tiempo: TIntegerField;
    dsqmaterial2: TDataSource;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    DBGrid2: TDBGrid;
    qidid: TLargeintField;
    Panel1: TPanel;
    Panel5: TPanel;
    DBText1: TDBText;
    DBText2: TDBText;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    lfecha: TDateTimePicker;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    Button3: TButton;
    Panel6: TPanel;
    Label8: TLabel;
    lbuscar: TEdit;
    procedure dsqentradasStateChange(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure qentradasBeforeDelete(DataSet: TDataSet);
    procedure qentradasBeforePost(DataSet: TDataSet);
    procedure DBEdit1Enter(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure lbuscarChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fentradasmaterial: Tfentradasmaterial;

implementation

{$R *.dfm}

uses datos, dlgmateriaprimas;

procedure Tfentradasmaterial.Button1Click(Sender: TObject);
begin
    qentradas.Delete;
end;

procedure Tfentradasmaterial.Button2Click(Sender: TObject);
begin
   qid.Close;
   qid.Open;
   qentradas.Append;
   qentradasid.Value:=qidid.asinteger;
   lfecha.SetFocus;

end;

procedure Tfentradasmaterial.Button3Click(Sender: TObject);
begin
    qentradasfecha.Value:=lfecha.Date;
    qentradas.Post;
    qentradas.Refresh;
end;

procedure Tfentradasmaterial.DBEdit1Enter(Sender: TObject);
begin
    fdlgmateriaprimas := Tfdlgmateriaprimas.Create(nil);
    try
      fdlgmateriaprimas.lbuscar.text:=dbedit1.Text;
      fdlgmateriaprimas.ShowModal;
    finally
      if qentradas.State in [dsbrowse] then qentradas.Edit;
      qentradasidmp.Value:=fdlgmateriaprimas.qmaterialid.AsString;
      qmaterial2.Close;
      qmaterial2.ParamByName('MATERIAL').AsString:=fdlgmateriaprimas.qmaterialid.AsString;
      qmaterial2.Open;
      dbedit2.SetFocus;
      fdlgmateriaprimas.Free;
    end;
end;

procedure Tfentradasmaterial.DBGrid1TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=qentradas.SortType;
  qentradas.SortedFields:=Column.FieldName;
  If st = stAscending then qentradas.SortType:=stDescending else qentradas.SortType:=stAscending;
  dsqentradas.DataSet.First;

end;

procedure Tfentradasmaterial.dsqentradasStateChange(Sender: TObject);
begin
    if qentradas.state in [dsedit,dsinsert] then
    begin
       panel5.Visible:=true;
       panel6.visible:=false;
       button1.Enabled:=false;
       button2.Enabled:=false;
       button3.Enabled:=true;
    end else
    begin
       panel6.Visible:=true;
       panel5.visible:=false;
       button1.Enabled:=true;
       button2.Enabled:=true;
       button3.Enabled:=false;
    end;
end;

procedure Tfentradasmaterial.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then  Key :=9;
    end;
end;

procedure Tfentradasmaterial.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 Tfentradasmaterial.FormShow(Sender: TObject);
begin
    lfecha.Date:=date();
    qentradas.Prepare;
    qentradas.ParamByName('ARTICULO').AsString:='%';
    qentradas.Open;
//    qmaterial.Open;
end;

procedure Tfentradasmaterial.lbuscarChange(Sender: TObject);
begin
    qentradas.Prepare;
    qentradas.ParamByName('ARTICULO').AsString:='%'+lbuscar.text+'%';
    qentradas.refresh;
end;

procedure Tfentradasmaterial.qentradasBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('¿Confirma que desea borrar este registro?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure Tfentradasmaterial.qentradasBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if qentradas.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea crear esta entrada?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar esta entrada?',true,true,true);
    case x of
        mrno: begin
                 qentradas.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 qentradas.cancel;
                 abort;
                 END;

    end;

end;

end.
