unit fprestamos;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, ZAbstractDataset, ZDataset,
  ZAbstractRODataset, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls, Vcl.ExtCtrls,
  Vcl.DBCtrls;

type
  Tprestamos = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    tbuscarlibro: TEdit;
    Label1: TLabel;
    DBGrid1: TDBGrid;
    Panel3: TPanel;
    Panel7: TPanel;
    Label2: TLabel;
    tbuscaralumno: TEdit;
    DBGrid2: TDBGrid;
    DBGrid3: TDBGrid;
    qalumnos: TZReadOnlyQuery;
    qprestamos: TZQuery;
    qprestamosid: TIntegerField;
    qprestamoside: TIntegerField;
    qprestamosidl: TWideStringField;
    qprestamosida: TIntegerField;
    qprestamosfecha: TDateField;
    qprestamosfecha_limite: TDateField;
    qprestamosfecha_devolucion: TDateField;
    qprestamosimporte_devuelto: TFloatField;
    qprestamosseloqueda: TSmallintField;
    qprestamosdevuelto: TSmallintField;
    dsqprestamos: TDataSource;
    dsqalumnos: TDataSource;
    qalumnosnombre_completo: TWideStringField;
    dsqlibros: TDataSource;
    qlibros: TZReadOnlyQuery;
    qlibrosid: TWideStringField;
    qlibrostitulo: TWideStringField;
    qprestamosalumno: TStringField;
    qprestamostitulo: TStringField;
    qalumnosid: TIntegerField;
    qalumnos2: TZReadOnlyQuery;
    qlibros2: TZReadOnlyQuery;
    qlibros2titulo: TWideStringField;
    qalumnos2nombre_completo: TWideStringField;
    Button1: TButton;
    gcrpagado: TDBCheckBox;
    procedure tbuscaralumnoChange(Sender: TObject);
    procedure tbuscarlibroChange(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure qprestamosCalcFields(DataSet: TDataSet);
    procedure Button1Click(Sender: TObject);
    procedure DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure qprestamosAfterPost(DataSet: TDataSet);
    procedure DBGrid3CellClick(Column: TColumn);
    procedure dsqalumnosDataChange(Sender: TObject; Field: TField);
    procedure DBGrid2DblClick(Sender: TObject);
    procedure DBGrid2CellClick(Column: TColumn);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  prestamos: Tprestamos;

const
  rojo=$00AAAAFF;
  amarillo=$00B9FFFF;
  verde=$00C7FBAA;
  azul=$00FFFFBB;
implementation

{$R *.dfm}

procedure Tprestamos.Button1Click(Sender: TObject);
begin
    qprestamos.Append;
    qprestamoside.Value:=1;
    qprestamosidl.Value:=qlibrosid.AsString;
    qprestamosida.Value:=qalumnosid.AsInteger;
    qprestamosfecha.Value:=date();
    qprestamosseloqueda.Value:=0;
    qprestamosdevuelto.Value:=0;
    qprestamos.Post;
    qprestamos.Refresh;
    qlibros.Refresh;
end;

procedure Tprestamos.DBGrid2CellClick(Column: TColumn);
var alumno:string;
begin
   alumno:=qalumnosid.AsString;
   qprestamos.close;
   qprestamos.prepare;
   qprestamos.ParamByName('ALUMNO').Asstring:=alumno;
   qprestamos.open;
end;

procedure Tprestamos.DBGrid2DblClick(Sender: TObject);
var alumno:string;
begin
   alumno:=qalumnosid.AsString;
   qprestamos.close;
   qprestamos.prepare;
   qprestamos.ParamByName('ALUMNO').Asstring:=alumno;
   qprestamos.open;
end;

procedure Tprestamos.DBGrid3CellClick(Column: TColumn);
begin
    if column.Field.FieldName ='devuelto' then
    begin
        if qprestamosdevuelto.asinteger=1 then
         begin
           qprestamos.Edit;
           qprestamosdevuelto.Value:=0;
           qprestamosfecha_devolucion.Value:=strtodate('01/01/1900');
           qprestamos.Post;
           qprestamos.Refresh;
           dbgrid3.selectedIndex:=1;
         end else
               begin
                 qprestamos.Edit;
                 qprestamosdevuelto.Value:=1;
                 qprestamosfecha_devolucion.Value:=date();
                 qprestamos.Post;
                 qprestamos.Refresh;
                 dbgrid3.SelectedIndex:=1;
               end;
    end;
end;

procedure Tprestamos.DBGrid3DrawColumnCell(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: Integer;
  DrawRect: TRect;
begin
//    dm.recibos.MasterSource:=nil;
if qprestamos.Active=false then qprestamos.Open;
    if dbgrid3.DataSource=dsqprestamos then
        begin
        if qprestamosdevuelto.Asinteger=1 then
        begin
            DBgrid3.Canvas.brush.Color := verde;
        end;
        DBgrid3.DefaultDrawColumnCell(Rect, DataCol, Column, State);
        if qprestamosdevuelto.Asinteger=0 then
        begin
            DBgrid3.Canvas.brush.Color := rojo;
        end;
        DBgrid3.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;

    if (gdFocused in State) then
    begin
      if (Column.Field.FieldName = 'devuelto') 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 = 'devuelto') 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];
         DBgrid3.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid3.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
       end;
     end;
     gcrpagado.visible:=false;

end;

procedure Tprestamos.dsqalumnosDataChange(Sender: TObject; Field: TField);
var filtro,alumno,titulo:string;
begin

end;

procedure Tprestamos.FormShow(Sender: TObject);
var filtro:string;
begin
   filtro:='%';
   qlibros.Prepare;
   qlibros.ParamByName('FILTRO').AsString:=filtro;
   qlibros.Open;
   qalumnos.Prepare;
   qalumnos.ParamByName('FILTRO').AsString:=filtro;
   qalumnos.Open;

   qlibros2.Open;
   qalumnos2.open;
   qprestamos.Prepare;
   qprestamos.ParamByName('ALUMNO').AsString:=filtro;
   qprestamos.Open;
end;

procedure Tprestamos.qprestamosAfterPost(DataSet: TDataSet);
begin
    qlibros.Refresh;
    qprestamos.refresh;
end;

procedure Tprestamos.qprestamosCalcFields(DataSet: TDataSet);
begin
   qalumnos2.Prepare;
   qalumnos2.ParamByName('ALUMNO').AsInteger:=qprestamosida.AsInteger;
   qalumnos2.Refresh;
   qlibros2.Prepare;
   qlibros2.ParamByName('TITULO').AsString:=qprestamosidl.AsString;
   qlibros2.Refresh;
   qprestamosalumno.Value:=qalumnos2nombre_completo.asstring;
   qprestamostitulo.Value:=qlibros2titulo.asstring;
end;

procedure Tprestamos.tbuscaralumnoChange(Sender: TObject);
var filtro,alumno,titulo:string;
begin
    if tbuscaralumno.text<>'' then
    begin
        filtro:='%'+tbuscaralumno.Text+'%';
    end else
        begin
         filtro:='%';
        end;
//   qlibros.Close;
   qalumnos.Prepare;
   qalumnos.ParamByName('FILTRO').AsString:=filtro;
   qalumnos.refresh;
   alumno:=qalumnosid.AsString;
   if tbuscaralumno.Text='' then alumno:='%';
   if tbuscarlibro.Text='' then titulo:='%';

   qprestamos.close;
   qprestamos.prepare;
   qprestamos.ParamByName('ALUMNO').Asstring:=alumno;
   qprestamos.open;
end;

procedure Tprestamos.tbuscarlibroChange(Sender: TObject);
var filtro:string;
begin
    if tbuscarlibro.text<>'' then
    begin
        filtro:='%'+tbuscarlibro.Text+'%';

    end else filtro:='%';
//   qlibros.Close;
   qlibros.Prepare;
   qlibros.ParamByName('FILTRO').AsString:=filtro;
   qlibros.refresh;


end;

end.
