unit uEditarFichaArco;

interface

uses
  {$IFDEF WINDOWS}
  Windows,
   {$ELSE}
  LCLType,
   {$ENDIF}
  Messages, SysUtils, xMatDefs, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uBaseEditoresFichas, StdCtrls, ExtCtrls, Grids, Buttons, uArcos,
  uCosaConNombre, uFichasLPD,
  uSalasDeJuego, utilidades, uconstantesSimSEE, uFechas, uverdoc, uOpcionesSimSEEEdit,
  uFuentesAleatorias;

type

  { TEditarFichaArco }

  TEditarFichaArco = class(TBaseEditoresFichas)
    BCancelar: TButton;
    BGuardar: TButton;
    CbArcoGemelo: TComboBox;
    cbBornePmax: TComboBox;
    CbConsiderarArcoGem: TCheckBox;
    cbConsiderarPeajeEnElDespacho: TCheckBox;
    cbFuentePmax: TComboBox;
    cbSumarPeajeAl_CDP: TCheckBox;
    cbUsarFuentePMax: TCheckBox;
    eFactorPeaje_CDP: TEdit;
    eFD: TEdit;
    ePagoPorDisponibilidad: TEdit;
    ePeaje_pp: TEdit;
    ePMax_pp: TEdit;
    eRendimiento_pp: TEdit;
    eTMR: TEdit;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    lBornePmax: TLabel;
    lFuentePmax: TLabel;
    Panel1: TPanel;
    BAyuda: TButton;
    Pmax2Arcos: TEdit;
    procedure CbConsiderarArcoGemChange(Sender: TObject);
    procedure cbFuentePmaxChange(Sender: TObject);
    procedure cbUsarFuentePMaxChange(Sender: TObject);
    procedure cbUsarFuentePMaxClick(Sender: TObject);
    procedure eRendimiento_ppChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure EditEnter(Sender: TObject);
    procedure EditExit(Sender: TObject);
    procedure cambiosForm(Sender: TObject);
    procedure GroupBox1Click(Sender: TObject);
    procedure Label2Click(Sender: TObject);
    procedure Label7Click(Sender: TObject);
    procedure lBornePmaxClick(Sender: TObject);
    procedure Panel1Click(Sender: TObject);
    procedure PPeriodicidadClick(Sender: TObject);
    procedure sgChequearCambios(Sender: TObject);
    procedure sgGetEditText(Sender: TObject; ACol, ARow: integer;
      var Value: string);
    procedure sgChequearCambiosKeyDown(Sender: TObject; var Key: word;
      Shift: TShiftState);
    procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
    procedure BCancelarClick(Sender: TObject);
    procedure BGuardarClick(Sender: TObject); override;
    procedure BAyudaClick(Sender: TObject);
  protected
    function validarFormulario: boolean; override;
    procedure validarCambioTabla(tabla: TStringGrid); override;
  private
    arco: TArco;
  public
    constructor Create(AOwner: TComponent; cosaConNombre: TCosaConNombre;
      ficha: TFichaLPD; sala: TSalaDeJuego); override;
  end;

var
  EditarFichaArco: TEditarFichaArco;

implementation

uses uBaseAltasEditores, SimSEEEditMain;

  {$R *.lfm}

constructor TEditarFichaArco.Create(AOwner: TComponent;
  cosaConNombre: TCosaConNombre; ficha: TFichaLPD; sala: TSalaDeJuego);
var
  fichaAux: TFichaArco;
begin
  inherited Create(AOwner, cosaConNombre, ficha, sala);
  arco := cosaConNombre as TArco;
  guardado := True;


  inherited inicializarCBFuenteCondicional(cbUsarFuentePMax, lFuentePmax,
    lBornePmax, cbFuentePmax, cbBornePmax, True, False);

  if (ficha <> nil) then
  begin
    fichaAux := ficha as TFichaArco;
    self.EFIni.Text := FSimSEEEdit.fechaIniToString(fichaAux.fecha);
    self.eRendimiento_pp.Text := DAOfNRealToStr_(fichaAux.rendimiento, 12, 2, ';');
    self.ePeaje_pp.Text := DAOfNRealToStr_(fichaAux.peaje, 12, 2, ';');
    self.ePMax_pp.Text := DAOfNRealToStr_(fichaAux.PMAx, 12, 1, ';');
    self.eFD.Text := FloatToStr(fichaAux.fd);
    self.eTMR.Text := FloatToStr(fichaAux.tRepHoras);
    self.cbConsiderarPeajeEnElDespacho.Checked :=
      fichaAux.flg_ConsiderarPeajeEnElDespacho;
    self.cbSumarPeajeAl_CDP.Checked := fichaAux.flg_SumarPeajeAlCDP;
    self.eFactorPeaje_CDP.Text := FloatToStr(fichaAux.factorPeajeCDP);
    self.ePagoPorDisponibilidad.Text :=
      FloatToStr(fichaAux.PagoPorDisponibilidad_USD_MWh);


    inherited setCBFuenteCondicional(cbUsarFuentePMax, lFuentePmax,
      lBornePmax, cbFuentePmax, cbBornePmax, True, fichaAux.flg_usarFuentePmax,
      fichaAux.fuentePmax, fichaAux.bornePmax);

    {$IFDEF ARCO_GEMELOS}
    //ARCOGEMELO
    Self.CbConsiderarArcoGem.Checked := fichaAux.flg_ConArgoGemelo;
    inicializarCBArcos(self.CbArcoGemelo, fichaAux.flg_ConArgoGemelo);
    setCBArco(self.CbArcoGemelo, fichaAux.ArcoGemelo);
    self.Pmax2Arcos.Text := FloatToStr(fichaAux.PMaxConjunto);
    {$ENDIF}
  end
  else
  begin

    self.EFIni.Text := '';
    self.eRendimiento_pp.Text := '';
    self.ePeaje_pp.Text := '';
    self.ePMax_pp.Text := '';
    self.eFD.Text := '';
    self.eTMR.Text := '';
    self.cbConsiderarPeajeEnElDespacho.Checked := True;
    self.cbSumarPeajeAl_CDP.Checked := True;
    self.eFactorPeaje_CDP.Text := FloatToStr(1.0);
    self.ePagoPorDisponibilidad.Text := FloatToStr(0.0);

    {$IFDEF ARCO_GEMELOS}
    inicializarCBArcos(self.CbArcoGemelo, True);
    Self.CbConsiderarArcoGem.Checked := False;
    self.Pmax2Arcos.Text := '';
    {$ENDIF}
  end;
end;

function TEditarFichaArco.validarFormulario: boolean;
var
  res: boolean;
begin

  res := inherited validarFormulario and validarEditFecha(EFIni) and
    validarPeriodicidad(CBPeriodicidad, CBLargoPeriodo, ELargoPeriodo,
    EFIniPeriodo, EFFinPeriodo, sgPeriodicidad) and validarEditFloat(eFD, 0, 2) and
    validarEditFloat(eTMR, 0, 10000) and validarEditDAOfNReal(
    eRendimiento_pp, -100, 100, ';') and validarEditDAOfNReal(
    ePMax_pp, -100000, 100000, ';') and validarEditDAOfNReal(
    ePeaje_pp, -100000, 100000, ';') and validarEditFloat(ePagoPorDisponibilidad);

  if cbSumarPeajeAl_CDP.Checked then
    res := res and validarEditFloat(eFactorPeaje_CDP, -1E20, 1E20);
  if CbConsiderarArcoGem.Checked then
    res := res and validarCBArco(CbArcoGemelo);
  Result := res;
end;

procedure TEditarFichaArco.validarCambioTabla(tabla: TStringGrid);
begin
  inherited validarCambioTablaNReals(tabla);
end;

procedure TEditarFichaArco.FormCreate(Sender: TObject);
begin
  utilidades.AgregarFormatoFecha(LFIni);
end;

procedure TEditarFichaArco.cbFuentePmaxChange(Sender: TObject);
begin
  inherited cbFuenteChange(Sender, cbBornePmax);
end;

procedure TEditarFichaArco.CbConsiderarArcoGemChange(Sender: TObject);
begin

end;

procedure TEditarFichaArco.cbUsarFuentePMaxChange(Sender: TObject);
begin

end;

procedure TEditarFichaArco.cbUsarFuentePMaxClick(Sender: TObject);
begin
  inherited cbFuenteCondicionalClick(cbUsarFuentePMax, lFuentePmax,
    lBornePmax, cbFuentePmax, cbBornePmax, True);
end;

procedure TEditarFichaArco.eRendimiento_ppChange(Sender: TObject);
begin

end;

procedure TEditarFichaArco.EditEnter(Sender: TObject);
begin
  inherited EditEnter(Sender);
end;

procedure TEditarFichaArco.EditExit(Sender: TObject);
begin
  inherited EditExit(Sender);
end;

procedure TEditarFichaArco.cambiosForm(Sender: TObject);
begin
  inherited cambiosForm(Sender);
end;

procedure TEditarFichaArco.GroupBox1Click(Sender: TObject);
begin

end;

procedure TEditarFichaArco.Label2Click(Sender: TObject);
begin

end;

procedure TEditarFichaArco.Label7Click(Sender: TObject);
begin

end;

procedure TEditarFichaArco.lBornePmaxClick(Sender: TObject);
begin

end;

procedure TEditarFichaArco.Panel1Click(Sender: TObject);
begin

end;

procedure TEditarFichaArco.PPeriodicidadClick(Sender: TObject);
begin

end;

procedure TEditarFichaArco.sgChequearCambios(Sender: TObject);
begin
  inherited sgChequearCambios(Sender);
end;

procedure TEditarFichaArco.sgGetEditText(Sender: TObject; ACol, ARow: integer;
  var Value: string);
begin
  inherited sgGetEditText(Sender, ACol, ARow, Value);
end;

procedure TEditarFichaArco.sgChequearCambiosKeyDown(Sender: TObject;
  var Key: word; Shift: TShiftState);
begin
  inherited sgChequearCambiosKeyDown(Sender, key, Shift);
end;

procedure TEditarFichaArco.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
  inherited FormCloseQuery(Sender, CanClose);
end;

procedure TEditarFichaArco.BCancelarClick(Sender: TObject);
begin
  inherited BCancelarClick(Sender);
end;

procedure TEditarFichaArco.BGuardarClick(Sender: TObject);
var
  periodicidad: TPeriodicidad;
  ValorArcoGem: TArco;
  Flg_ArcoGem: boolean;
  Pmax_2Arcos: integer;
  fuentePmax: TFuenteAleatoria;
  bornePmax: string;
  flg_usarFuentePmax: boolean;
  hola: TDAofNReal;
begin
  if validarFormulario then
  begin
    if not CBPeriodicidad.Checked then
      periodicidad := nil
    else
      periodicidad := inherited darPeriodicidad(CBLargoPeriodo,
        ELargoPeriodo, EFIniPeriodo, EFFinPeriodo, sgPeriodicidad);

    if CbConsiderarArcoGem.Checked then
    begin
      ValorArcoGem := valorCBArco(CbArcoGemelo);
      Flg_ArcoGem := CbConsiderarArcoGem.Checked;
      Pmax_2Arcos := StrToInt(Pmax2Arcos.Text);
    end
    else
    begin
      ValorArcoGem := nil;
      Flg_ArcoGem := False;
      Pmax_2Arcos := 0;
    end;


    valoresCBFuenteCondicional(cbUsarFuentePMax, cbFuentePmax, cbBornePmax,
      True, flg_usarFuentePmax, fuentePmax, bornePmax);

    hola := StrToDAOfNReal_(eRendimiento_pp.Text, ';');

    // if ficha<>nil then
    //   ficha.free o actualizar la ficha

    ficha := TFichaArco.Create(capa, StrToFecha(EFIni.Text),
      periodicidad, StrToDAOfNReal_(eRendimiento_pp.Text, ';'),
      StrToDAOfNReal_(ePeaje_pp.Text, ';'), StrToDAOfNReal_(
      ePMax_pp.Text, ';'), StrToFloat(eFD.Text), StrToFloat(eTMR.Text),
      cbConsiderarPeajeEnElDespacho.Checked, cbSumarPeajeAl_CDP.Checked,
      StrToFloat(eFactorPeaje_CDP.Text), StrToFloat(ePagoPorDisponibilidad.Text)
      , ValorArcoGem, Flg_ArcoGem, Pmax_2Arcos, flg_usarFuentePmax,
      fuentePmax, bornePmax);
    ModalResult := mrOk;
  end;
end;

procedure TEditarFichaArco.BAyudaClick(Sender: TObject);
begin
  verdoc( 3828, TArco);
end;

end.
