unit ftratamientosbase;

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.StdCtrls, Vcl.ExtCtrls,
  Vcl.DBCtrls, frxClass, frxDBSet;

type
  Ttratamientosbase = class(TForm)
    qtratamientos: TZQuery;
    qtratamientosdetalle: TZQuery;
    dstratamientos: TDataSource;
    qtratamientoside: TIntegerField;
    qtratamientosid: TIntegerField;
    qtratamientosdescripcion: TWideStringField;
    qtratamientostipo: TWideStringField;
    qtratamientosdetalleide: TIntegerField;
    qtratamientosdetalleidt: TIntegerField;
    qtratamientosdetalleidaf: TIntegerField;
    qtratamientosdetalleidma: TIntegerField;
    qtratamientosdetalledescripcion_af: TWideStringField;
    qtratamientosdetallecantidad_base: TFloatField;
    qtratamientosdetalledosis: TFloatField;
    qtratamientosdetalleunidad_medida: TWideStringField;
    dstratamientosdetalle: TDataSource;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel1: TPanel;
    DBGrid2: TDBGrid;
    qtratamientosdetalledescripcion_ma: TWideStringField;
    qtratamientosdetalleregistro: TWideStringField;
    qtratamientosdetalleplazo: TIntegerField;
    qtratamientosobservaciones: TWideStringField;
    qtratamientosdetalleficha: TBlobField;
    qtratamientosdetallecantidad_mezcla: TIntegerField;
    qtratamientosdetallecantidad_materia: TFloatField;
    Button4: TButton;
    dbtratamiento: TfrxDBDataset;
    dbempresa: TfrxDBDataset;
    dbtratamientosdetalle: TfrxDBDataset;
    informes: TfrxReport;
    btAnuevo: TButton;
    btAborrar: TButton;
    btAmodificar: TButton;
    btAguardar: TButton;
    btAcancelar: TButton;
    Panel13: TPanel;
    Button2: TButton;
    Button3: TButton;
    qaux: TZQuery;
    qtratamientosdetalleorden: TIntegerField;
    DBGrid1: TDBGrid;
    Panel5: TPanel;
    qcampanyas: TZReadOnlyQuery;
    qcampanyasid: TIntegerField;
    qcampanyasidempresa: TIntegerField;
    qcampanyasid_anterior: TIntegerField;
    qcampanyasdescripcion: TWideStringField;
    qcampanyasfechainicio: TDateField;
    qcampanyasfechafin: TDateField;
    qcampanyasult_pesada: TIntegerField;
    dsqcampanyas: TDataSource;
    combocampanyas: TDBLookupComboBox;
    Label301: TLabel;
    qtratamientosfecha: TDateField;
    Button1: TButton;
    qtratamientos2: TZQuery;
    qtratamientos2ide: TIntegerField;
    qtratamientos2id: TIntegerField;
    qtratamientos2descripcion: TWideStringField;
    qtratamientos2tipo: TWideStringField;
    qtratamientos2observaciones: TWideStringField;
    qtratamientos2fecha: TDateField;
    qinsertardetalles2: TZReadOnlyQuery;
    qtratamientosvelocidad: TFloatField;
    qtratamientosnum_boquillas: TIntegerField;
    Button5: TButton;
    qtratamientospresion: TIntegerField;
    qtratamientoslitros_hect: TIntegerField;
    qboquillas: TZReadOnlyQuery;
    dsqboquillas: TDataSource;
    comboboquillas: TDBLookupComboBox;
    qboquillasid: TIntegerField;
    qboquillascodigo: TWideStringField;
    qboquillasdescripcion: TWideStringField;
    qboquillasFloatField5bar: TFloatField;
    qboquillasFloatField6bar: TFloatField;
    qboquillasFloatField7bar: TFloatField;
    qboquillasFloatField8bar: TFloatField;
    qboquillasFloatField9bar: TFloatField;
    qboquillasFloatField10bar: TFloatField;
    qboquillasFloatField11bar: TFloatField;
    qboquillasFloatField12bar: TFloatField;
    qboquillasFloatField13bar: TFloatField;
    qboquillasFloatField14bar: TFloatField;
    qboquillasFloatField15bar: TFloatField;
    qboquillasFloatField16bar: TFloatField;
    qboquillasFloatField17bar: TFloatField;
    qboquillasFloatField18bar: TFloatField;
    qboquillasFloatField19bar: TFloatField;
    qboquillasFloatField20bar: TFloatField;
    qboquillasFloatField21bar: TFloatField;
    qboquillasFloatField22bar: TFloatField;
    qboquillasFloatField23bar: TFloatField;
    qboquillasFloatField24bar: TFloatField;
    qboquillasFloatField25bar: TFloatField;
    qtratamientosdesc_boquilla: TWideStringField;
    qlitrosminuto: TZReadOnlyQuery;
    qtratamientoslitros_minuto: TFloatField;
    qtratamientostipo_boquilla: TWideStringField;
    Button6: TButton;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    Panel9: TPanel;
    DBGrid3: TDBGrid;
    DBGrid4: TDBGrid;
    Panel10: TPanel;
    Button7: TButton;
    Button8: TButton;
    Panel11: TPanel;
    DBGrid5: TDBGrid;
    dsqvariedades: TDataSource;
    qvariedadesparcelas: TZReadOnlyQuery;
    qvariedadesparcelasvariedad: TWideStringField;
    qparcelas: TZReadOnlyQuery;
    qparcelascodpar: TWideStringField;
    qparcelasnombre: TWideStringField;
    qparcelassuperficie: TFloatField;
    qparcelasancho_calle: TFloatField;
    qparcelasempresa: TIntegerField;
    qparcelasnumero: TWideStringField;
    dsqparcelas: TDataSource;
    dsqparcelasrecomendacion: TDataSource;
    qparcelasrecomendacion: TZQuery;
    qparcelasrecomendacionid: TIntegerField;
    qparcelasrecomendacionide: TIntegerField;
    qparcelasrecomendacionidtb: TIntegerField;
    qparcelasrecomendacionparcela: TWideStringField;
    qparcelasrecomendacionsuperficie: TFloatField;
    qparcelasrecomendacionancho_calle: TFloatField;
    qparcelasrecomendacionidparcela: TWideStringField;
    qtratamientosancho_calle: TFloatField;
    qparcelasrecomendaciondistancialineal: TIntegerField;
    qtratamientos2velocidad: TFloatField;
    qtratamientos2num_boquillas: TIntegerField;
    qtratamientos2tipo_boquilla: TWideStringField;
    qtratamientos2presion: TIntegerField;
    qtratamientos2litros_hect: TIntegerField;
    qtratamientos2desc_boquilla: TWideStringField;
    qtratamientos2litros_minuto: TFloatField;
    qtratamientos2ancho_calle: TFloatField;
    qpresion: TZReadOnlyQuery;
    qpresioncodigo: TWideStringField;
    qpresionpresion: TIntegerField;
    qpresionlitros_hect: TFloatField;
    qtratamientosventilador: TWideStringField;
    procedure FormShow(Sender: TObject);
    procedure qtratamientosBeforePost(DataSet: TDataSet);
    procedure DBGrid2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Button4Click(Sender: TObject);
    procedure qtratamientosdetalleAfterPost(DataSet: TDataSet);
    procedure Button2Click(Sender: TObject);
    procedure btAborrarClick(Sender: TObject);
    procedure btAnuevoClick(Sender: TObject);
    procedure btAmodificarClick(Sender: TObject);
    procedure btAguardarClick(Sender: TObject);
    procedure btAcancelarClick(Sender: TObject);
    procedure dstratamientosStateChange(Sender: TObject);
    procedure dsqcampanyasDataChange(Sender: TObject; Field: TField);
    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure qtratamientosAfterPost(DataSet: TDataSet);
    procedure Button6Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure dstratamientosDataChange(Sender: TObject; Field: TField);
    procedure dsqvariedadesDataChange(Sender: TObject; Field: TField);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  tratamientosbase: Ttratamientosbase;

implementation

{$R *.dfm}

uses datos, fbuscararticulos, fselecparcelas, fboquillas, fgenerartratamientos;

procedure Ttratamientosbase.btAborrarClick(Sender: TObject);
begin
    qtratamientos.Delete;
end;

procedure Ttratamientosbase.btAcancelarClick(Sender: TObject);
begin
    qtratamientos.Cancel;
end;

procedure Ttratamientosbase.btAguardarClick(Sender: TObject);
begin
    qtratamientos.Post;
end;

procedure Ttratamientosbase.btAmodificarClick(Sender: TObject);
begin
    qtratamientos.Edit;
end;

procedure Ttratamientosbase.btAnuevoClick(Sender: TObject);
begin
    qaux.Close;
    qaux.ParamByName('EMPRESA').AsInteger:=dm.tempresaid.asinteger;
    qaux.Prepare;
    qaux.Open;
    qtratamientos.Append;
    qtratamientoside.value:=dm.tempresaid.AsInteger;
    qtratamientosid.Value:=qaux.Fields[0].AsInteger;
    qtratamientosfecha.Value:=date();

end;

procedure Ttratamientosbase.Button1Click(Sender: TObject);
begin
    qaux.Close;
    qaux.ParamByName('EMPRESA').AsInteger:=dm.tempresaid.asinteger;
    qaux.Prepare;
    qaux.Open;
    qtratamientos2.Open;
    qtratamientos2.Append;
    qtratamientos2ide.value:=qtratamientoside.AsInteger;
    qtratamientos2id.Value:=qaux.Fields[0].AsInteger;
    qtratamientos2fecha.Value:=date();
    qtratamientos2observaciones.value:=qtratamientosobservaciones.AsString;
    qtratamientos2descripcion.value:=qtratamientosdescripcion.AsString;
    qtratamientos2tipo.value:=qtratamientostipo.asstring;
    qtratamientos2velocidad.value:=qtratamientosvelocidad.Asfloat;
    qtratamientos2num_boquillas.value:=qtratamientosnum_boquillas.Asinteger;
    qtratamientos2presion.value:=qtratamientospresion.Asinteger;
    qtratamientos2litros_hect.value:=qtratamientoslitros_hect.Asinteger;
    qtratamientos2desc_boquilla.value:=qtratamientosdesc_boquilla.AsString;
    qtratamientos2litros_minuto.value:=qtratamientoslitros_minuto.Asinteger;
    qtratamientos2tipo_boquilla.value:=qtratamientostipo_boquilla.AsString;
    qtratamientos2ancho_calle.value:=qtratamientosancho_calle.Asfloat;
    qtratamientos2.post;
    qinsertardetalles2.Prepare;
    qinsertardetalles2.ParamByName('IDTNEW').AsInteger:=qaux.Fields[0].AsInteger;
    qinsertardetalles2.ParamByName('IDTOLD').AsInteger:=qtratamientosid.AsInteger;
    qinsertardetalles2.ParamByName('EMPRESA').AsInteger:=qtratamientoside.asinteger;
    qinsertardetalles2.ExecSQL;
    qcampanyas.First;
    combocampanyas.KeyValue:=qcampanyasdescripcion.AsString;
    qtratamientosdetalle.refresh;
end;

procedure Ttratamientosbase.Button2Click(Sender: TObject);
begin
    qtratamientosdetalle.Delete;
end;

procedure Ttratamientosbase.Button4Click(Sender: TObject);
begin
            qtratamientos.Filter:='id='+qtratamientosid.Asstring;
            qtratamientos.Filtered:=true;
            informes.Report.Clear;
            informes.LoadFromFile('c:\agrigest\informes\inftratamientosbase.fr3');
            informes.ShowReport();
            qtratamientos.Filtered:=false;

end;

procedure Ttratamientosbase.Button5Click(Sender: TObject);
begin
  generartratamientos := Tgenerartratamientos.Create(nil);
  try
    generartratamientos.vrecomendacion:=qtratamientosid.AsInteger;
    generartratamientos.vempresa:=qtratamientoside.AsInteger;
    generartratamientos.ShowModal();
  finally
    generartratamientos.Free;
  end;

end;

procedure Ttratamientosbase.Button6Click(Sender: TObject);
begin
  boquillas := Tboquillas.Create(nil);
  try
    boquillas.ShowModal;
  finally
    boquillas.Free;
  end;
end;

procedure Ttratamientosbase.Button7Click(Sender: TObject);
begin
   qparcelasrecomendacion.delete;
   qparcelas.Close;
   qparcelas.open;
end;

procedure Ttratamientosbase.Button8Click(Sender: TObject);
begin
   qparcelasrecomendacion.Append;
   qparcelasrecomendacionide.value:=qtratamientoside.AsInteger;
   qparcelasrecomendacionidtb.value:=qtratamientosid.AsInteger;
   qparcelasrecomendacionidparcela.value:=qparcelasnumero.AsSTRING;
   qparcelasrecomendacionparcela.value:=qparcelasnombre.AsString;
   qparcelasrecomendacionsuperficie.value:=qparcelassuperficie.AsFloat;
   qparcelasrecomendacionancho_calle.value:=qparcelasancho_calle.AsFloat;
   qparcelasrecomendacion.Post;
   qparcelas.Refresh;
   qparcelasrecomendacion.Refresh
end;

procedure Ttratamientosbase.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = comboboquillas.DataField) then
    with comboboquillas do
    begin
      Left := Rect.Left + DBGrid1.Left + 2;
      Top := Rect.Top + DBGrid1.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;
end;
end;


procedure Ttratamientosbase.DBGrid2KeyDown(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 Ttratamientosbase.dsqcampanyasDataChange(Sender: TObject;
  Field: TField);
begin
   qtratamientos.Close;
   qtratamientos.Prepare;
   qtratamientos.ParamByName('FINICIO').AsDate:=qcampanyasfechainicio.asdatetime;
   qtratamientos.ParamByName('FFIN').AsDate:=qcampanyasfechafin.asdatetime;
   qtratamientos.ParamByName('EMPRESA').Asinteger:=qcampanyasidempresa.AsInteger;
   qtratamientos.Open;
end;

procedure Ttratamientosbase.dsqvariedadesDataChange(Sender: TObject;
  Field: TField);
  var vvariedad:string;
begin
    qparcelas.Close;
    qparcelas.Prepare;
    qparcelas.ParamByName('EMPRESA').AsInteger:=qtratamientoside.AsInteger;
    if qvariedadesparcelasvariedad.AsString=' CUALQUIERA' then vvariedad:='%' else vvariedad:=qvariedadesparcelasvariedad.AsString;
    qparcelas.ParamByName('VARIEDAD').AsString:=vvariedad;
    qparcelas.ParamByName('RECOMENDACION').AsInteger:=qtratamientosid.AsInteger;
    qparcelas.Open;
end;

procedure Ttratamientosbase.dstratamientosDataChange(Sender: TObject;
  Field: TField);
begin
   qvariedadesparcelas.open;
   qparcelasrecomendacion.Close;
   qparcelasrecomendacion.Prepare;
   qparcelasrecomendacion.ParamByName('EMPRESA').AsInteger:=qtratamientoside.asinteger;
   qparcelasrecomendacion.ParamByName('TRATAMIENTO').AsInteger:=qtratamientosid.asinteger;
   qparcelasrecomendacion.Open;
end;

procedure Ttratamientosbase.dstratamientosStateChange(Sender: TObject);
begin
    if qtratamientos.State in [dsedit,dsinsert] then
    begin
        btanuevo.Enabled:=false;
        btamodificar.Enabled:=false;
        btaborrar.Enabled:=false;
        btacancelar.Enabled:=true;
        btaguardar.Enabled:=true;
        button3.Enabled:=false;
        button2.Enabled:=false;


    end else
    begin
        btanuevo.Enabled:=true;
        btamodificar.Enabled:=true;
        btaborrar.Enabled:=true;
        btacancelar.Enabled:=false;
        btaguardar.Enabled:=false;
        button2.Enabled:=true;
        button3.Enabled:=true;
    end;
end;

procedure Ttratamientosbase.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;
end;

procedure Ttratamientosbase.FormShow(Sender: TObject);
begin
    qcampanyas.Open;
    combocampanyas.KeyValue:=qcampanyasdescripcion.Asstring;
    qtratamientosdetalle.Open;
    qboquillas.Open;
end;

procedure Ttratamientosbase.qtratamientosAfterPost(DataSet: TDataSet);
begin
   qtratamientos.Refresh;
   abort;
end;

procedure Ttratamientosbase.qtratamientosBeforePost(DataSet: TDataSet);
var campo:string;
begin
   if qtratamientospresion.AsString='' then
   begin
     qpresion.Close;
     qpresion.Prepare;
     qpresion.ParamByName('ANCHO').AsFloat:=qtratamientosancho_calle.AsFloat;
     qpresion.ParamByName('VELOCIDAD').AsInteger:=qtratamientosvelocidad.asinteger;
     qpresion.ParamByName('BOQUILLAS').AsInteger:=qtratamientosnum_boquillas.AsInteger;
     qpresion.ParamByName('LITROS').Asinteger:=qtratamientoslitros_hect.AsInteger;
     qpresion.ParamByName('CODBOQUILLA').AsString:=qboquillascodigo.asstring;
     qpresion.Open;
     campo:=qpresionpresion.AsString+'bar';
     qlitrosminuto.Close;
     qlitrosminuto.SQL.Clear;
     qlitrosminuto.SQL.Add('select '+campo+' from boquillas where codigo=:BOQUILLA');
     qlitrosminuto.Prepare;
     qlitrosminuto.ParamByName('BOQUILLA').AsString:=qboquillascodigo.AsString;
     qlitrosminuto.Open;
     qtratamientoside.Value:=dm.tempresaid.asinteger;
     qtratamientostipo_boquilla.Value:=qboquillascodigo.AsString;
     qtratamientoslitros_minuto.value:=qlitrosminuto.Fields[0].AsFloat;
     qtratamientospresion.value:=qpresionpresion.AsInteger;
   end else
   begin
     campo:=qtratamientospresion.AsString+'bar';
     qlitrosminuto.Close;
     qlitrosminuto.SQL.Clear;
     qlitrosminuto.SQL.Add('select '+campo+' from boquillas where codigo=:BOQUILLA');
     qlitrosminuto.Prepare;
     qlitrosminuto.ParamByName('BOQUILLA').AsString:=qboquillascodigo.AsString;
     qlitrosminuto.Open;
     qtratamientoside.Value:=dm.tempresaid.asinteger;
     qtratamientostipo_boquilla.Value:=qboquillascodigo.AsString;
     qtratamientoslitros_minuto.value:=qlitrosminuto.Fields[0].AsFloat;
   end;
end;

procedure Ttratamientosbase.qtratamientosdetalleAfterPost(DataSet: TDataSet);
begin
   qtratamientosdetalle.Refresh;
end;

end.
