unit fcuadernos;



interface



uses
  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Comp.Client, uFireDacHelper,

  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, 

    Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls, Vcl.StdCtrls,

  Vcl.DBCtrls, Vcl.ComCtrls, frxClass, frxDBSet, URLMon, IdBaseComponent,

  IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,shellapi, Vcl.Mask;



type

  Tcuadernos = class(TForm)

    dbempresa: TfrxDBDataset;

    dbtratamiento: TfrxDBDataset;

    dbtratamientosdetalle: TfrxDBDataset;

    gcrpagado: TDBCheckBox;

    informes: TfrxReport;

    qarticulo: TFDQuery;

    qarticuloidempresa: TIntegerField;

    qarticuloidaf: TIntegerField;

    qarticulodescripcion: TWideStringField;

    qarticulopreciocoste: TFloatField;

    qarticuloidgrupo: TIntegerField;

    qarticuloidfamilia: TIntegerField;

    qarticulocodigo: TWideStringField;

    qarticuloregistro: TWideStringField;

    qaux: TFDQuery;

    qaux2: TFDQuery;

    qboquillas: TFDQuery;

    qboquillasboquilla: TWideStringField;

    qcentrocoste: TFDQuery;

    qcentrocosteempresa: TIntegerField;

    qcentrocostecodpar: TWideStringField;

    qcentrocostenombre: TWideStringField;

    qcentrocoste2: TFDQuery;

    qcentrocoste2empresa: TIntegerField;

    qcentrocoste2codpar: TWideStringField;

    qcentrocoste2nombre: TWideStringField;

    qdepositos: TFDQuery;

    qdepositosdeposito: TWideStringField;

    qmateriaprima: TFDQuery;

    qmateriaprimadescripcion: TWideStringField;

    qmateriaprima2: TFDQuery;

    qmateriaprima2descripcion: TWideStringField;

    qoperarios: TFDQuery;

    qoperariosoperario: TWideStringField;

    qpresiones: TFDQuery;

    qresponsables: TFDQuery;

    qresponsablesnif: TWideStringField;

    qresponsablesnombre: TWideStringField;

    qresponsablesfirma: TBlobField;

    qresponsables2: TFDQuery;

    qresponsables2nif: TWideStringField;

    qresponsables2nombre: TWideStringField;

    qresponsables2firma: TBlobField;

    qstock: TFDQuery;

    qstockid: TIntegerField;

    qstockidempresa: TIntegerField;

    qstocklote: TWideStringField;

    qstockfecha: TDateField;

    qtractores: TFDQuery;

    qtractorestractor: TWideStringField;

    qtratamientos: TFDQuery;

    qtratamientosdetalle: TFDQuery;

    qvelocidad: TFDQuery;

    qventilador: TFDQuery;

    qventiladorventilador: TWideStringField;

    qtratamientoside: TIntegerField;

    qtratamientosid: TIntegerField;

    qtratamientosfecha: TDateField;

    qtratamientosidcc: TWideStringField;

    qtratamientosdesc_cc: TWideStringField;

    qtratamientosresponsable: TWideStringField;

    qtratamientosidrecomendacion: TIntegerField;

    qtratamientoscontabilizado: TIntegerField;

    qtratamientosnif_responsable: TWideStringField;

    qtratamientosobservaciones: TWideStringField;

    qtratamientosoperario: TWideStringField;

    qtratamientosidjustificacion: TIntegerField;

    qtratamientoscondiciones_metereologicas: TWideStringField;

    qtratamientoshora_fin: TTimeField;

    qtratamientostractor: TWideStringField;

    qtratamientosdeposito: TWideStringField;

    qtratamientosvelocidad: TWideStringField;

    qtratamientospresion: TWideStringField;

    qtratamientosboquilla: TWideStringField;

    qtratamientosventilador: TWideStringField;

    qtratamientosmostrar: TIntegerField;

    qtratamientosvariedad: TWideStringField;

    qtratamientosdetalleide: TIntegerField;

    qtratamientosdetalleidt: TIntegerField;

    qtratamientosdetalleidaf: TIntegerField;

    qtratamientosdetalleidma: TIntegerField;

    qtratamientosdetalledescripcion_af: TWideStringField;

    qtratamientosdetalledescripcion_ma: TWideStringField;

    qtratamientosdetallecantidad_base: TFloatField;

    qtratamientosdetalledosis: TFloatField;

    qtratamientosdetalleunidad_medida: TWideStringField;

    qtratamientosdetalleregistro: TWideStringField;

    qtratamientosdetalleplazo: TIntegerField;

    qtratamientosdetalleficha: TBlobField;

    qtratamientosdetallecantidad_mezcla: TFloatField;

    qtratamientosdetallecantidad_materia: TFloatField;

    qtratamientosdetalleen_cuaderno: TIntegerField;

    qtratamientosdetalleidconsumo: TIntegerField;

    qtratamientosdetalleorden: TIntegerField;

    dsqconsumos: TDataSource;

    dsqtratamientos: TDataSource;

    dsqtratamientosdetalle: TDataSource;

    dsqoperarios: TDataSource;

    dsqcentrocoste2: TDataSource;

    dsqcentrocoste: TDataSource;

    dsqresponsables: TDataSource;

    dsqtractores: TDataSource;

    dsqvelocidad: TDataSource;

    dsqdepositos: TDataSource;

    dsqventilador: TDataSource;

    dsmateriasprimas: TDataSource;

    dsqresponsable2: TDataSource;

    dsqboquillas: TDataSource;

    dsqpresiones: TDataSource;

    Panel6: TPanel;

    Panel7: TPanel;

    Label36: TLabel;

    btAmodificar: TButton;

    btAborrar: TButton;

    btAnuevo: TButton;

    btAguardar: TButton;

    btAcancelar: TButton;

    Button4: TButton;

    Panel9: TPanel;

    DBGrid3: TDBGrid;

    Panel10: TPanel;

    Label4: TLabel;

    Label5: TLabel;

    Label3: TLabel;

    Label1: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    combobuscarresponsables: TDBLookupComboBox;

    combobuscarparcelas: TDBLookupComboBox;

    btfiltrar: TButton;

    Button9: TButton;

    fdesde: TDateTimePicker;

    fhasta: TDateTimePicker;

    combovariedades: TDBLookupComboBox;

    Ffecha: TDateTimePicker;

    combocentrocoste: TDBLookupComboBox;

    comboresponsables: TDBLookupComboBox;

    Panel11: TPanel;

    Panel12: TPanel;

    Button7: TButton;

    Button6: TButton;

    Button10: TButton;

    DBGrid4: TDBGrid;

    Panel13: TPanel;

    Button2: TButton;

    Button3: TButton;

    combotractores: TDBLookupComboBox;

    combovelocidad: TDBLookupComboBox;

    combodepositos: TDBLookupComboBox;

    comboboquillas: TDBLookupComboBox;

    comboventilador: TDBLookupComboBox;

    combopresiones: TDBLookupComboBox;

    combooperarios: TDBLookupComboBox;

    DBGrid5: TDBGrid;

    dsqresumenproductos: TDataSource;

    qresumenproductos: TFDQuery;

    qnombrecampanya: TFDQuery;

    qnombrecampanyadescripcion: TWideStringField;

    qtratamientosdetalleconficha: TStringField;

    qtratamientosdetalleidentrada: TIntegerField;

    qtratamientosdetallefecha: TDateField;

    qcargas: TFDQuery;

    dbtratamientoscargas: TfrxDBDataset;

    dsqcargas: TDataSource;
    qtratamientosdetallecantidadprevista_mezcla: TFloatField;
    qtratamientosdetallecantidadprevista_materia: TFloatField;

    procedure Button6Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure FormKeyPress(Sender: TObject; var Key: Char);

    procedure FormShow(Sender: TObject);

    procedure btfiltrarClick(Sender: TObject);

    procedure Button9Click(Sender: TObject);

    procedure dsqtratamientosDataChange(Sender: TObject; Field: TField);

    procedure dsqtratamientosdetalleDataChange(Sender: TObject; Field: TField);

    procedure DBGrid5DrawColumnCell(Sender: TObject; const Rect: TRect;

      DataCol: Integer; Column: TColumn; State: TGridDrawState);

    procedure qtratamientosAfterPost(DataSet: TDataSet);

    procedure qtratamientosBeforeDelete(DataSet: TDataSet);

    procedure qtratamientosdetalleAfterDelete(DataSet: TDataSet);

    procedure qtratamientosdetalleAfterPost(DataSet: TDataSet);

    procedure qtratamientosdetalleBeforeDelete(DataSet: TDataSet);

    procedure qtratamientosdetalleBeforePost(DataSet: TDataSet);

    procedure qtratamientosdetalleCalcFields(DataSet: TDataSet);

    procedure DBGrid3CellClick(Column: TColumn);

    procedure DBGrid3ColExit(Sender: TObject);

    procedure DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;

      DataCol: Integer; Column: TColumn; State: TGridDrawState);

    procedure DBGrid3TitleClick(Column: TColumn);

    procedure DBGrid4CellClick(Column: TColumn);

    procedure DBGrid4DrawColumnCell(Sender: TObject; const Rect: TRect;

      DataCol: Integer; Column: TColumn; State: TGridDrawState);

    procedure DBGrid4KeyDown(Sender: TObject; var Key: Word;

      Shift: TShiftState);

    procedure DBGrid4TitleClick(Column: TColumn);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button7Click(Sender: TObject);

    procedure Button10Click(Sender: TObject);

    procedure btAnuevoClick(Sender: TObject);

    procedure btAborrarClick(Sender: TObject);

    procedure btAmodificarClick(Sender: TObject);

    procedure btAguardarClick(Sender: TObject);

    procedure btAcancelarClick(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;



var

  cuadernos: Tcuadernos;



implementation



{$R *.dfm}

uses principal, fbuscararticulos, datos, fcargastratamientos;



procedure Tcuadernos.btAborrarClick(Sender: TObject);

begin

  qtratamientos.Delete;

end;



procedure Tcuadernos.btAcancelarClick(Sender: TObject);

begin

   qtratamientos.Cancel;

end;



procedure Tcuadernos.btAguardarClick(Sender: TObject);

begin

    qtratamientosidcc.value:=qcentrocostecodpar.AsString;

    qtratamientoside.Value:=qcentrocosteempresa.Asinteger;

    qtratamientosresponsable.Value:=qresponsablesnombre.AsString;

    qtratamientosnif_responsable.Value:=qresponsablesnif.asstring;

    qtratamientosfecha.Value:=ffecha.Date;

    qtratamientos.Post;

    qtratamientos.Refresh;

end;



procedure Tcuadernos.btAmodificarClick(Sender: TObject);

begin

    qtratamientos.Edit;

end;



procedure Tcuadernos.btAnuevoClick(Sender: TObject);

begin

    ffecha.Date:=date;

    qtratamientos.Append;

    qaux.Close;

    qaux.ParamByName('EMPRESA').AsInteger:=dm.tempresaid.asinteger;

    qaux.Prepare;

    qaux.Open;

    qtratamientoside.value:=dm.tempresaid.AsInteger;

    qtratamientosid.Value:=qaux.Fields[0].AsInteger;

    qtratamientosfecha.Value:=ffecha.Date;

    dbgrid3.setfocus;

    dbgrid3.SelectedIndex:=1;

end;



procedure Tcuadernos.btfiltrarClick(Sender: TObject);

var vparcela,vresponsable,vvariedad:string;

begin

   if combobuscarparcelas.keyvalue=null then vparcela:='%' else vparcela:=combobuscarparcelas.keyvalue;

   if combobuscarresponsables.keyvalue=null then vresponsable:='%' else vresponsable:=combobuscarresponsables.keyvalue;

   if combovariedades.keyvalue=null then vvariedad:='%' else vvariedad:=combovariedades.keyvalue;

   qtratamientos.Close;

   qtratamientos.Prepare;

   qtratamientos.ParamByName('parcela').AsString:=vparcela;

   qtratamientos.ParamByName('responsable').AsString:=vresponsable;

   qtratamientos.ParamByName('variedad').AsString:=vvariedad;

   qtratamientos.ParamByName('DESDE').AsDate:=fdesde.Date;

   qtratamientos.ParamByName('HASTA').AsDate:=fhasta.Date;

   qtratamientos.ParamByName('MOSTRAR').asstring:='%';

   qtratamientos.Open;



end;



procedure Tcuadernos.Button2Click(Sender: TObject);

begin

    qtratamientosdetalle.Delete;

end;



procedure Tcuadernos.Button3Click(Sender: TObject);

begin

    if qtratamientosdetalleficha.AsString<>'' then

    begin

      qtratamientosdetalleficha.SaveToFile('c:\agrigest\tmp\'+qtratamientosdetalleregistro.AsString+'.pdf');

      ShellExecute(Handle,nil,PChar('c:\agrigest\tmp\'+qtratamientosdetalleregistro.AsString+'.pdf'),'','',SW_SHOWNORMAL);

    end;

end;



procedure Tcuadernos.Button4Click(Sender: TObject);

var imprimirtodo,vparcela,vresponsable:string;

begin

   if combobuscarparcelas.keyvalue=null then vparcela:='%' else vparcela:=combobuscarparcelas.keyvalue;

   if combobuscarresponsables.keyvalue=null then vresponsable:='%' else vresponsable:=combobuscarresponsables.keyvalue;

   imprimirtodo:='1';

   qtratamientos.Close;

   qtratamientos.Prepare;

   qtratamientos.ParamByName('parcela').AsString:=vparcela;

   qtratamientos.ParamByName('responsable').AsString:=vresponsable;

   qtratamientos.ParamByName('DESDE').AsDate:=fdesde.Date;

   qtratamientos.ParamByName('HASTA').AsDate:=fhasta.Date;

   qtratamientos.ParamByName('MOSTRAR').asstring:=imprimirtodo;

   qtratamientos.Open;

   qcargas.Close;

   qcargas.Prepare;

   qcargas.ParamByName('EMPRESA').AsInteger:=qtratamientos.FieldByName('ide').AsInteger;

   qcargas.ParamByName('TRATAMIENTO').AsString:='%';

   qcargas.Open;



    informes.Report.Clear;

    informes.LoadFromFile('c:\agrigest\informes\inftratamientos.fr3');

    informes.ShowReport();

    qtratamientos.Filtered:=false;

    qtratamientosdetalle.Filtered:=false;

end;



procedure Tcuadernos.Button6Click(Sender: TObject);

begin
    qcargas.Close;
    qcargas.Prepare;
    qcargas.ParamByName('EMPRESA').AsInteger:=qtratamientos.FieldByName('ide').AsInteger;
    qcargas.ParamByName('TRATAMIENTO').AsString:=qtratamientos.FieldByName('id').AsString;
    qcargas.Open;
    qtratamientos.Filter:='id='+qtratamientosid.Asstring;
    qtratamientos.Filtered:=true;
    qtratamientosdetalle.Filter:='en_cuaderno=1';
    qtratamientosdetalle.Filtered:=true;
    informes.Report.Clear;
    informes.LoadFromFile('c:\agrigest\informes\inftratamientos.fr3');
    informes.ShowReport();
    qtratamientos.Filtered:=false;
    qtratamientosdetalle.Filtered:=false;
end;



procedure Tcuadernos.Button7Click(Sender: TObject);

var direccion:pwidechar;

    registro,cadena:string;

begin

   while not qtratamientosdetalle.eof do

   begin



    registro:= qtratamientosdetalleregistro.AsString;

    if registro<>'' then

    begin

      qaux.SQL.Clear;

      qaux.SQL.Add('select registro,autorizado from productos_fitosanitarios where registro=:REGISTRO');

      qaux.Prepare;

      qaux.ParamByName('REGISTRO').AsString:=registro;

      qaux.Open;

      if qaux.RecordCount>0 then

      begin

        if qaux.Fields[1].AsInteger=1 then

        begin

          cadena:='https://servicio.mapa.gob.es/regfiweb/VerFicha/Index?numRegistro='+registro;

          direccion:=pwidechar(widestring(cadena));

          URLDownloadToFile(nil, direccion, 'C:\agrigest\tmp\ficha.pdf', 0, nil);

          qtratamientosdetalle.Edit;

          qtratamientosdetalleficha.LoadFromFile('c:\agrigest\tmp\ficha.pdf');

        end else showmessage('PRODUCTO NO AUTORIZADO EN PRODUCTOS FITOSANITARIOS AUTORIZADOS');

      end else showmessage('PRODUCTO NO ENCONTRADO EN PRODUCTOS FITOSANITARIOS AUTORIZADOS');

    end;

    qtratamientosdetalle.Next;

   end;

end;



procedure Tcuadernos.Button10Click(Sender: TObject);

begin

  cargastratamientos := Tcargastratamientos.Create(nil);

  try

    cargastratamientos.vempresa := qtratamientos.FieldByName('ide').AsInteger;

    cargastratamientos.vtratamiento := qtratamientos.FieldByName('id').AsInteger;

    cargastratamientos.ShowModal();

  finally

    cargastratamientos.Free;

    qtratamientosdetalle.Refresh;

    qtratamientos.Refresh;

  end;

end;



procedure Tcuadernos.Button9Click(Sender: TObject);

begin

    combobuscarparcelas.KeyValue:=null;

    combobuscarresponsables.KeyValue:=null;

    combovariedades.KeyValue:=null;

    btfiltrar.click;

end;



procedure Tcuadernos.DBGrid3CellClick(Column: TColumn);

begin

    if column.Field.FieldName ='mostrar' then

    begin

        if qtratamientosmostrar.asinteger=1 then

         begin

           qtratamientos.Edit;

           qtratamientosmostrar.Value:=0;

           qtratamientos.Post;

           dbgrid3.selectedIndex:=1;

         end else

               begin

                 qtratamientos.Edit;

                 qtratamientosmostrar.Value:=1;

                 qtratamientos.Post;

                 qtratamientos.Refresh;

                 dbgrid3.SelectedIndex:=1;

               end;

    end;

end;



procedure Tcuadernos.DBGrid3ColExit(Sender: TObject);

begin

     if qtratamientos.State in [dsinsert,dsedit] then

     begin

       qtratamientosfecha.Value:=ffecha.Date;

     end else

     begin

//         qtratamientos.Edit;

//         qtratamientosfecha.Value:=ffecha.Date;

     end;

end;



procedure Tcuadernos.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,imgindex,bmpwidth: Integer;

  DrawRect: TRect;

begin

if (gdFocused in State) then

begin



    if (Column.Field.FieldName = 'contabilizado') then

     begin

       gcrpagado.Left := Rect.Left + DBgrid3.Left + 2;

       gcrpagado.Top := Rect.Top + DBgrid3.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 = 'contabilizado') 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];

         DBgrid3.Canvas.FillRect(Rect);

         DrawFrameControl(DBgrid3.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);

       end;

    end;



if (gdFocused in State) then

begin



    if (Column.Field.FieldName = 'mostrar') then

     begin

       gcrpagado.Left := Rect.Left + DBgrid3.Left + 2;

       gcrpagado.Top := Rect.Top + DBgrid3.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 = 'mostrar') 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];

         DBgrid3.Canvas.FillRect(Rect);

         DrawFrameControl(DBgrid3.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);

       end;

    end;

    gcrpagado.visible:=false;



  if (gdFocused in State) then

  begin

    if (Column.Field.FieldName = combocentrocoste.DataField) then

    with combocentrocoste do

    begin

      Left := Rect.Left + DBGrid3.Left + 2;

      Top := Rect.Top + DBGrid3.Top + 2;

      Width := Rect.Right - Rect.Left;

      Width := Rect.Right - Rect.Left;

      Height := Rect.Bottom - Rect.Top;

      Visible := True;

      setfocus;

      dropdown;

    end else combocentrocoste.Visible:=false;

    if (Column.Field.FieldName = comboresponsables.DataField) then

    with comboresponsables do

    begin

      Left := Rect.Left + DBGrid3.Left + 2;

      Top := Rect.Top + DBGrid3.Top + 2;

      Width := Rect.Right - Rect.Left;

      Width := Rect.Right - Rect.Left;

      Height := Rect.Bottom - Rect.Top;

      Visible := True;

      setfocus;

      dropdown;

    end else comboresponsables.Visible:=false;

    if (Column.Field.FieldName = combotractores.DataField) then

    with combotractores do

    begin

      Left := Rect.Left + DBGrid3.Left + 2;

      Top := Rect.Top + DBGrid3.Top + 2;

      Width := Rect.Right - Rect.Left;

      Width := Rect.Right - Rect.Left;

      Height := Rect.Bottom - Rect.Top;

      Visible := True;

      setfocus;

      dropdown;

    end else combotractores.Visible:=false;

    if (Column.Field.FieldName = combodepositos.DataField) then

    with combodepositos do

    begin

      Left := Rect.Left + DBGrid3.Left + 2;

      Top := Rect.Top + DBGrid3.Top + 2;

      Width := Rect.Right - Rect.Left;

      Width := Rect.Right - Rect.Left;

      Height := Rect.Bottom - Rect.Top;

      Visible := True;

      setfocus;

      dropdown;

    end else combodepositos.Visible:=false;

    if (Column.Field.FieldName = combovelocidad.DataField) then

    with combovelocidad do

    begin

      Left := Rect.Left + DBGrid3.Left + 2;

      Top := Rect.Top + DBGrid3.Top + 2;

      Width := Rect.Right - Rect.Left;

      Width := Rect.Right - Rect.Left;

      Height := Rect.Bottom - Rect.Top;

      Visible := True;

      setfocus;

      dropdown;

    end else combovelocidad.Visible:=false;

    if (Column.Field.FieldName = combopresiones.DataField) then

    with combopresiones do

    begin

      Left := Rect.Left + DBGrid3.Left + 2;

      Top := Rect.Top + DBGrid3.Top + 2;

      Width := Rect.Right - Rect.Left;

      Width := Rect.Right - Rect.Left;

      Height := Rect.Bottom - Rect.Top;

      Visible := True;

      setfocus;

      dropdown;

    end else combopresiones.Visible:=false;

    if (Column.Field.FieldName = comboboquillas.DataField) then

    with comboboquillas do

    begin

      Left := Rect.Left + DBGrid3.Left + 2;

      Top := Rect.Top + DBGrid3.Top + 2;

      Width := Rect.Right - Rect.Left;

      Width := Rect.Right - Rect.Left;

      Height := Rect.Bottom - Rect.Top;

      Visible := True;

      setfocus;

      dropdown;

    end else comboboquillas.Visible:=false;

    if (Column.Field.FieldName = comboventilador.DataField) then

    with comboventilador do

    begin

      Left := Rect.Left + DBGrid3.Left + 2;

      Top := Rect.Top + DBGrid3.Top + 2;

      Width := Rect.Right - Rect.Left;

      Width := Rect.Right - Rect.Left;

      Height := Rect.Bottom - Rect.Top;

      Visible := True;

      setfocus;

      dropdown;

    end else comboventilador.Visible:=false;

    if (Column.Field.FieldName = combooperarios.DataField) then

    with combooperarios do

    begin

      Left := Rect.Left + DBGrid3.Left + 2;

      Top := Rect.Top + DBGrid3.Top + 2;

      Width := Rect.Right - Rect.Left;

      Width := Rect.Right - Rect.Left;

      Height := Rect.Bottom - Rect.Top;

      Visible := True;

      setfocus;

      dropdown;

    end else combooperarios.Visible:=false;

    if (Column.Field.FieldName = 'fecha') then

    with ffecha do

    begin

      Left := Rect.Left + DBGrid3.Left + 2;

      Top := Rect.Top + DBGrid3.Top + 2;

      Width := Rect.Right - Rect.Left;

      Width := Rect.Right - Rect.Left;

      Height := Rect.Bottom - Rect.Top;

      Visible := True;

    end else

    begin

     ffecha.Visible:=false;

    end;

  end;



end;



procedure Tcuadernos.DBGrid3TitleClick(Column: TColumn);

var

  st:TFDQuerySortType;

begin

  st:=qtratamientos.SortType;

  qtratamientos.SortedFields:=Column.FieldName;

  If st = stAscending then qtratamientos.SortType:=stDescending else qtratamientos.SortType:=stAscending;

  dsqtratamientos.DataSet.First;

end;



procedure Tcuadernos.DBGrid4CellClick(Column: TColumn);

begin

    if (CompareText(Column.FieldName, 'conficha') = 0) then

    begin

      if (qtratamientosdetalleficha.AsString <> '') then

      begin

        try

          qtratamientosdetalleficha.SaveToFile('c:\agrigest\tmp\' + qtratamientosdetalleregistro.AsString + '.pdf');

          ShellExecute(Handle, nil, PChar('c:\agrigest\tmp\' + qtratamientosdetalleregistro.AsString + '.pdf'), '', '', SW_SHOWNORMAL);

        except

          on E: Exception do

            ShowMessage('Error al exportar la ficha: ' + E.Message);

        end;

      end;

    end;



    if column.Field.FieldName ='en_cuaderno' then

    begin

        if qtratamientosdetalleen_cuaderno.asinteger=1 then

         begin

           qtratamientosdetalle.Edit;

           qtratamientosdetalleen_cuaderno.Value:=0;

           qtratamientosdetalle.Post;

           dbgrid4.selectedIndex:=1;

         end else

               begin

                 qtratamientosdetalle.Edit;

                 qtratamientosdetalleen_cuaderno.Value:=1;

                 qtratamientosdetalle.Post;

                 qtratamientosdetalle.Refresh;

                 dbgrid4.SelectedIndex:=1;

               end;

    end;

end;



procedure Tcuadernos.DBGrid4DrawColumnCell(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 = 'en_cuaderno') then

     begin

       gcrpagado.Left := Rect.Left + DBgrid4.Left + 2;

       gcrpagado.Top := Rect.Top + DBgrid4.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 = 'en_cuaderno') 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];

         DBgrid4.Canvas.FillRect(Rect);

         DrawFrameControl(DBgrid4.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);

       end;

    end;

    gcrpagado.visible:=false;

    fixRect := Rect;

    if column.Title.Caption ='Ficha' then

    begin

      if  qtratamientosdetalle.FieldByname('conficha').Asstring=' ' then imgIndex := 88 else imgIndex := -1;

      bitmap := TBitmap.Create;

      try

          base.listaiconos.GetBitmap(imgIndex,bitmap);

          bmpWidth := (Rect.Bottom - Rect.Top);

          fixRect.right := Rect.Left + bmpWidth;

          DBGrid4.Canvas.StretchDraw(fixRect,bitmap);

      finally

          bitmap.Free;

      end;

      fixRect := Rect;

      fixRect.Left := fixRect.Left + bmpWidth;

//      DBgrid4.Canvas.FillRect(Rect);

      DBGrid4.DefaultDrawColumnCell(fixRect,-1,Column,State);

    end;

end;



procedure Tcuadernos.DBGrid4KeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

    if (key=115) then

    begin

      buscararticulos := Tbuscararticulos.Create(nil);

      try

        fbuscararticulos.filtro:=qtratamientosdetalledescripcion_af.AsString;

        buscararticulos.Edit1.Text:=qtratamientosdetalledescripcion_af.AsString;

        buscararticulos.showmodal();

      finally

        if qtratamientosdetalle.State in [dsbrowse] then qtratamientosdetalle.Edit;

        qtratamientosdetalleidaf.Value:=buscararticulos.qarticulosid.Asinteger;

        qtratamientosdetalleregistro.Value:=buscararticulos.qarticulosregistro.Asstring;

        qtratamientosdetalledescripcion_af.value:=buscararticulos.qarticulosdescripcion.AsString;

        qtratamientosdetalledescripcion_ma.Value:=buscararticulos.qarticulosmateria_activa.Asstring;

        qtratamientosdetalledosis.value:=0;

        qtratamientosdetalleplazo.value:=buscararticulos.qarticulosplazo_seguridad.Asinteger;

        buscararticulos.Free;

      end;

    end;

end;



procedure Tcuadernos.DBGrid4TitleClick(Column: TColumn);

var

  st:TFDQuerySortType;

begin

  st:=qtratamientosdetalle.SortType;

  qtratamientos.SortedFields:=Column.FieldName;

  If st = stAscending then qtratamientosdetalle.SortType:=stDescending else qtratamientosdetalle.SortType:=stAscending;

  dsqtratamientosdetalle.DataSet.First;



end;



procedure Tcuadernos.DBGrid5DrawColumnCell(Sender: TObject; const Rect: TRect;

  DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

    if (qresumenproductos.FieldByName('num_tratamientos').AsInteger > qresumenproductos.FieldByName('num_aplicaciones').AsInteger) then

    begin

        DBGrid5.Canvas.brush.Color := rojo;

    end ;

    DBGrid5.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;



procedure Tcuadernos.dsqtratamientosDataChange(Sender: TObject; Field: TField);

begin

   qnombrecampanya.Prepare;

   qnombrecampanya.ParamByName('FECHA').AsDateTime:=qtratamientosfecha.AsDateTime;

   qnombrecampanya.refresh;

   qresumenproductos.Prepare;

   qresumenproductos.ParamByName('PARCELA').AsString:=qtratamientosidcc.AsString;

   qresumenproductos.ParamByName('CAMPANYA').AsString:=qnombrecampanyadescripcion.asstring;

   qresumenproductos.refresh;

   qtratamientosdetalle.Prepare;

   qtratamientosdetalle.ParamByName('EMPRESA').AsInteger:=qtratamientoside.AsInteger;

   qtratamientosdetalle.ParamByName('TRATAMIENTO').AsInteger:=qtratamientosid.AsInteger;

   qtratamientosdetalle.Refresh;

end;



procedure Tcuadernos.dsqtratamientosdetalleDataChange(Sender: TObject;

  Field: TField);

begin

      qresumenproductos.Locate('descripcion_af',qtratamientosdetalledescripcion_af.AsString,[loCaseInsensitive]);

end;



procedure Tcuadernos.FormKeyPress(Sender: TObject; var Key: Char);

begin

   key:=upcase(key);

    if (key='.') and (activecontrol is tdbgrid) then

    begin

        key:=','

    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;

// si presionamos ESC

    if (key=#$1B)  and (activecontrol is tdblookupcombobox )then

    begin

      activecontrol.Visible:=false;

    end;



end;



procedure Tcuadernos.FormShow(Sender: TObject);

var anyo,mes,dia:word;

begin

   decodedate(date,anyo,mes,dia);

   fdesde.Date:=(strtodate('01/01/'+inttostr(anyo)));

   fhasta.Date:=(strtodate('31/12/'+inttostr(anyo)));

   ffecha.Date:=date;



   qcentrocoste.close;

   qresponsables.Close;

   qtratamientos.Close;

   qtratamientosdetalle.close;

   qcentrocoste2.close;

   qresponsables2.Close;

   qmateriaprima2.Close;

   qtractores.close;

   qvelocidad.close;

   qdepositos.close;

   qboquillas.close;

   qpresiones.close;

   qventilador.close;

   qcentrocoste.open;

   qresponsables.open;

   qcentrocoste2.open;

   qresponsables2.open;

   qmateriaprima2.open;

   qnombrecampanya.Open;

   qresumenproductos.Open;

   qtratamientosdetalle.open;

   qtratamientos.ParamByName('parcela').AsString:='%';

   qtratamientos.ParamByName('responsable').AsString:='%';

   qtratamientos.ParamByName('DESDE').AsDate:=fdesde.Date;

   qtratamientos.ParamByName('HASTA').AsDate:=fhasta.Date;

   qtratamientos.ParamByName('MOSTRAR').asstring:='%';

   qtratamientos.Prepare;

   qtratamientos.open;

   qtractores.Open;

   qvelocidad.Open;

   qdepositos.Open;

   qboquillas.Open;

   qpresiones.Open;

   qventilador.Open;

   qoperarios.Open;

end;



procedure Tcuadernos.qtratamientosAfterPost(DataSet: TDataSet);

begin

   qtractores.refresh;

   qvelocidad.refresh;

   qdepositos.refresh;

   qboquillas.refresh;

   qpresiones.refresh;

   qventilador.refresh;

   qoperarios.Refresh;

end;



procedure Tcuadernos.qtratamientosBeforeDelete(DataSet: TDataSet);

begin

   case dm.PedirConfirmacion('Confirma que desea borrar este tratamiento?',true,true,false) of

        mrno:Abort;

   end;

end;



procedure Tcuadernos.qtratamientosdetalleAfterDelete(DataSet: TDataSet);

begin

    qresumenproductos.Refresh;

end;



procedure Tcuadernos.qtratamientosdetalleAfterPost(DataSet: TDataSet);

begin

    qtratamientosdetalle.Refresh;

    qresumenproductos.Refresh;

end;



procedure Tcuadernos.qtratamientosdetalleBeforeDelete(DataSet: TDataSet);

begin

   case dm.PedirConfirmacion('Confirma que desea borrar este tratamiento?',true,true,false) of

        mrno:Abort;

   end;

end;



procedure Tcuadernos.qtratamientosdetalleBeforePost(DataSet: TDataSet);

var x:integer;

begin

qtratamientosdetalleide.Value:=qtratamientoside.AsInteger;

qtratamientosdetalleidt.Value:=qtratamientosid.AsInteger;

if qtratamientosdetalle.state=dsinsert then x:=dm.PedirConfirmacion('Confirma que desea dar de alta este producto?',true,true,true)

                    else x:=dm.PedirConfirmacion('Confirma que desea modificar este producto?',true,true,true);

    case x of

        mrno: begin

                 qtratamientosdetalle.cancel;

                 abort;

              end;

        mrcancel:BEGIN

                 abort;

                 END;



    end;

end;



procedure Tcuadernos.qtratamientosdetalleCalcFields(DataSet: TDataSet);

begin

        if qtratamientosdetalleficha.AsString<>'' then qtratamientosdetalleconficha.Value:=' ' else qtratamientosdetalleconficha.Value:='';

end;



end.

