unit materias_primas;

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
  Tfmaterias_primas = class(TForm)
    Panel3: TPanel;
    dsqmaterias_primas: TDataSource;
    qmaterias_primas: TZQuery;
    qmaterias_primasid: TWideStringField;
    qmaterias_primasdescripcion: TWideStringField;
    qmaterias_primasobservaciones: TWideStringField;
    DBGrid1: TDBGrid;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    qmaterias_primases_tiempo: TIntegerField;
    gcrpagado: TDBCheckBox;
    Label5: TLabel;
    lbuscar: TEdit;
    Panel1: TPanel;
    DBGrid3: TDBGrid;
    dsqarticulos: TDataSource;
    qarticulos: TZReadOnlyQuery;
    qarticuloside: TWideStringField;
    qarticulosid: TWideStringField;
    qarticulosdescripcion: TWideStringField;
    qarticulosobservaciones: TWideStringField;
    qarticulosunidades_pack: TIntegerField;
    qmaterias_primasstock: TFloatField;
    procedure FormShow(Sender: TObject);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure qmaterias_primasBeforeDelete(DataSet: TDataSet);
    procedure qmaterias_primasBeforePost(DataSet: TDataSet);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure lbuscarChange(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure dsqmaterias_primasDataChange(Sender: TObject; Field: TField);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fmaterias_primas: Tfmaterias_primas;

implementation

{$R *.dfm}

uses datos;

procedure Tfmaterias_primas.Button1Click(Sender: TObject);
begin
    qmaterias_primas.Append;
    dbgrid1.SetFocus;
end;

procedure Tfmaterias_primas.Button2Click(Sender: TObject);
begin
    qmaterias_primas.edit;
    dbgrid1.SetFocus;
end;

procedure Tfmaterias_primas.Button3Click(Sender: TObject);
begin
   qmaterias_primas.Delete;
end;

procedure Tfmaterias_primas.DBGrid1CellClick(Column: TColumn);
begin
    if column.Field.FieldName ='es_tiempo' then
    begin
        if qmaterias_primases_tiempo.asinteger=1 then
         begin
           qmaterias_primas.Edit;
           qmaterias_primases_tiempo.Value:=0;
           qmaterias_primas.Post;
           dbgrid1.selectedIndex:=1;
         end else
               begin
                 qmaterias_primas.Edit;
                 qmaterias_primases_tiempo.Value:=1;
                 qmaterias_primas.Post;
                 qmaterias_primas.Refresh;
                 dbgrid1.selectedIndex:=1;
               end;
    end;
end;

procedure Tfmaterias_primas.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;
  fixRect:TRect;
  bitmap:tbitmap;
begin
fixRect := Rect;
if (gdFocused in State) then
begin

    if (Column.Field.FieldName = 'es_tiempo') 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 = 'es_tiempo') 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];
      //   DrawState := ISChecked[Column.Field.Asboolean];
         DBgrid1.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid1.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
       end;
    end;
    gcrpagado.visible:=false;

end;

procedure Tfmaterias_primas.DBGrid1TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=qmaterias_primas.SortType;
  qmaterias_primas.SortedFields:=Column.FieldName;
  If st = stAscending then qmaterias_primas.SortType:=stDescending else qmaterias_primas.SortType:=stAscending;
  dsqmaterias_primas.DataSet.First;
end;

procedure Tfmaterias_primas.dsqmaterias_primasDataChange(Sender: TObject;
  Field: TField);
begin
   qarticulos.Close;
   qarticulos.Prepare;
   qarticulos.ParamByName('PIDA').AsString:=qmaterias_primasid.AsString;
   qarticulos.Open;

end;

procedure Tfmaterias_primas.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then  Key :=9;
    end;
end;

procedure Tfmaterias_primas.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 Tfmaterias_primas.FormShow(Sender: TObject);
begin
    qmaterias_primas.Close;
    qmaterias_primas.Prepare;
    qmaterias_primas.ParamByName('TEXTO').AsString:='%';
    qmaterias_primas.Open;
end;

procedure Tfmaterias_primas.lbuscarChange(Sender: TObject);
var vbuscar:string;
begin
    qmaterias_primas.Close;
    qmaterias_primas.Prepare;
    if lbuscar.Text='' then vbuscar:='%' else vbuscar:='%'+lbuscar.Text+'%';
    qmaterias_primas.ParamByName('TEXTO').AsString:=vbuscar;
    qmaterias_primas.Open;
end;

procedure Tfmaterias_primas.qmaterias_primasBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('¿Confirma que desea borrar este Color?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure Tfmaterias_primas.qmaterias_primasBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if qmaterias_primas.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea dar de alta esta materia prima?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar este materia_prima?',true,true,true);
    case x of
        mrno: begin
                 qmaterias_primas.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 abort;
                 END;

    end;

end;

end.
