unit almacenes;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, ZAbstractRODataset,
  ZAbstractDataset, ZDataset, Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls, Vcl.StdCtrls,
  Vcl.DBCtrls;

type
  Tfalmacenes = class(TForm)
    Panel1: TPanel;
    Panel3: TPanel;
    DBGrid1: TDBGrid;
    dsqalmacenes: TDataSource;
    qalmacenes: TZQuery;
    dsqsectores: TDataSource;
    qsectores: TZQuery;
    qalmacenesid: TIntegerField;
    qalmacenesdescripcion: TWideStringField;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    qaux: TZQuery;
    qsectoresid: TIntegerField;
    qsectoresidalm: TIntegerField;
    qsectoresdescripcion: TWideStringField;
    Panel2: TPanel;
    Panel4: TPanel;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    DBGrid2: TDBGrid;
    gcrpagado: TDBCheckBox;
    qalmacenesfinal: TIntegerField;
    procedure FormShow(Sender: TObject);
    procedure qalmacenesBeforePost(DataSet: TDataSet);
    procedure qsectoresBeforePost(DataSet: TDataSet);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Button1Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure qalmacenesBeforeDelete(DataSet: TDataSet);
    procedure qsectoresBeforeDelete(DataSet: TDataSet);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid1CellClick(Column: TColumn);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  falmacenes: Tfalmacenes;

implementation

{$R *.dfm}

uses datos;

procedure Tfalmacenes.Button1Click(Sender: TObject);
var vid:integer;
begin
   qaux.SQL.Clear;
   qaux.SQL.Add('select max(id)+1 from almacenes');
   qaux.Open;
   if qaux.Fields[0].AsString='' then vid:=1 else vid:=qaux.Fields[0].asinteger;
   qalmacenes.append;
   dbgrid1.SetFocus;
   qalmacenesid.Value:=vid;

end;

procedure Tfalmacenes.Button2Click(Sender: TObject);
begin
    qalmacenes.Edit;
    dbgrid1.SetFocus;
end;

procedure Tfalmacenes.Button3Click(Sender: TObject);
begin
    qsectores.Delete;
end;

procedure Tfalmacenes.Button4Click(Sender: TObject);
var vid:integer;
begin
   qaux.SQL.Clear;
   qaux.SQL.Add('select ifnull(max(id)+1,1) from sectoralmacen where idalm='+qalmacenesid.AsString);
   qaux.Open;
   vid:=qaux.Fields[0].asinteger;
   qsectores.append;
   dbgrid2.SetFocus;
   qsectoresid.Value:=vid;
end;

procedure Tfalmacenes.Button5Click(Sender: TObject);
begin
    qsectores.Edit;
    dbgrid2.SetFocus;
end;

procedure Tfalmacenes.Button6Click(Sender: TObject);
var vid:integer;
begin
   qaux.SQL.Clear;
   qaux.SQL.Add('select max(id)+1 from sectoralmacen where idalm='+qalmacenesid.Asstring);
   qaux.Open;
   if qaux.Fields[0].AsString='' then vid:=1 else vid:=qaux.Fields[0].asinteger;
   qsectores.append;
   dbgrid2.SetFocus;
   qsectoresid.Value:=vid;

end;

procedure Tfalmacenes.DBGrid1CellClick(Column: TColumn);
begin
    if column.Field.FieldName ='final' then
    begin
        if qalmacenesfinal.asinteger=1 then
         begin
           qalmacenes.Edit;
           qalmacenesfinal.Value:=0;
           qalmacenes.Post;
           dbgrid1.selectedIndex:=1;
         end else
               begin
                 qalmacenes.Edit;
                 qalmacenesfinal.Value:=1;
                 qalmacenes.Post;
                 qalmacenes.Refresh;
                 dbgrid1.selectedIndex:=1;
               end;
    end;
end;

procedure Tfalmacenes.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 = 'final') 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 = 'final') 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 Tfalmacenes.DBGrid2DrawColumnCell(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 = 'final') then
     begin
       gcrpagado.Left := Rect.Left + DBgrid2.Left + 2;
       gcrpagado.Top := Rect.Top + DBgrid2.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 = 'final') 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];
         DBgrid2.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid2.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
       end;
    end;
    gcrpagado.visible:=false;

end;

procedure Tfalmacenes.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then  Key :=9;
    end;
end;

procedure Tfalmacenes.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 Tfalmacenes.FormShow(Sender: TObject);
begin
    qalmacenes.Open;
    qsectores.Open;
end;

procedure Tfalmacenes.qalmacenesBeforeDelete(DataSet: TDataSet);
var x:integer;
begin
    if qalmacenes.state=dsbrowse then x:=dm.PedirConfirmacion('¿Confirma que desea borrar este Almacen?',true,true,true);
    case x of
        mrno: begin
                 qalmacenes.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 abort;
                 END;

    end;

end;

procedure Tfalmacenes.qalmacenesBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if qalmacenes.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea dar de alta este Almacen?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar este Almacen?',true,true,true);
    case x of
        mrno: begin
                 qalmacenes.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 abort;
                 END;

    end;
end;

procedure Tfalmacenes.qsectoresBeforeDelete(DataSet: TDataSet);
var x:integer;
begin
    if qsectores.state=dsbrowse then x:=dm.PedirConfirmacion('¿Confirma que desea eliminiar esta sección?',true,true,true);

    case x of
        mrno: begin
                 qsectores.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 abort;
                 END;

    end;

end;

procedure Tfalmacenes.qsectoresBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if qsectores.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea dar de alta esta sección?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar esta sección?',true,true,true);
    case x of
        mrno: begin
                 qsectores.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 abort;
                 END;

    end;

end;

end.
