{
===============================================================================
  Copyright (©) 2006. Rodax Software.
===============================================================================
  Los contenidos de este fichero son propiedad de Rodax Software titular del
  copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
  en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
  acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
  bajo el que se suministra.
  -----------------------------------------------------------------------------
  Web:  www.rodax-software.com
===============================================================================
  Fecha primera versión: 22-05-2006
  Versión actual: 1.0.0
  Fecha versión actual: 22-05-2006
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit uEditorFormaPago;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Grids, DBGrids, StdCtrls, Mask, DBCtrls, DB,
  uBizFormasPago, uBizFormasPagoPlazos,
  uFormasPagoController, uFormasPagoPlazosController,
  uDADataTable, uIEditorFormaPago, ActnList, ExtCtrls, JvExControls,
  JvComponent, JvEnterTab, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
  cxDataStorage, cxEdit, cxDBData, cxSpinEdit, cxGridCustomTableView,
  cxGridTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls,
  cxGridCustomView, cxGrid, uDAInterfaces, dxLayoutControl, dblookup,
  cxRadioGroup, cxContainer, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxLookupEdit,
  cxDBLookupEdit, cxDBLookupComboBox, uBizSubCuentas, uSubCuentasController,
  cxCheckBox, cxDBEdit;

type
  TfEditorFormaPago = class(TForm, IEditorFormaPago)
    ActionList1: TActionList;
    dsFormaPago: TDADataSource;
    actAnadir: TAction;
    actEliminar: TAction;
    actAceptar: TAction;
    actCancelar: TAction;
    actCerrar: TAction;
    actModificar: TAction;
    dsPlazos: TDADataSource;
    JvEnterAsTab1: TJvEnterAsTab;
    dxLayoutControl1Group_Root: TdxLayoutGroup;
    dxLayoutControl1: TdxLayoutControl;
    dxLayoutControl1Item1: TdxLayoutItem;
    eReferencia: TDBEdit;
    dxLayoutControl1Item3: TdxLayoutItem;
    ListaFormasPago: TcxGrid;
    ListaFormasPagoDBTableView1: TcxGridDBTableView;
    ListaFormasPagoDBTableView1NUM_DIAS: TcxGridDBColumn;
    ListaFormasPagoDBTableView1PORCENTAJE: TcxGridDBColumn;
    ListaFormasPagoLevel1: TcxGridLevel;
    dxLayoutControl1Group3: TdxLayoutGroup;
    dxLayoutControl1Item4: TdxLayoutItem;
    bAnadir: TButton;
    panelPlazosDePago: TdxLayoutGroup;
    dxLayoutControl1Item5: TdxLayoutItem;
    bEliminar: TButton;
    dxLayoutControl1Group1: TdxLayoutGroup;
    dxLayoutControl1Item6: TdxLayoutItem;
    bAceptar: TButton;
    dxLayoutControl1Item7: TdxLayoutItem;
    bCancelar: TButton;
    dxLayoutControl1Item8: TdxLayoutItem;
    Bevel4: TBevel;
    dxLayoutControl1Group2: TdxLayoutGroup;
    dxLayoutControl1Group5: TdxLayoutGroup;
    dxLayoutControl1Item9: TdxLayoutItem;
    Bevel2: TBevel;
    rdPagoPlazos: TcxRadioButton;
    dxLayoutControl1Item10: TdxLayoutItem;
    dxLayoutControl1Item11: TdxLayoutItem;
    rdPagoVencimiento: TcxRadioButton;
    dsSubcuentas: TDADataSource;
    dxLayoutControl1Item12: TdxLayoutItem;
    cbSubcuenta: TcxDBLookupComboBox;
    cxDBCheckBox1: TcxDBCheckBox;
    checkIgnorarContabilidad: TdxLayoutItem;
    panelVencimiento: TdxLayoutGroup;
    dxLayoutControl1Item2: TdxLayoutItem;
    eDescripcion: TDBMemo;
    procedure FormShow(Sender: TObject);

    procedure actAnadirExecute(Sender: TObject);
    procedure actEliminarExecute(Sender: TObject);
    procedure actAceptarExecute(Sender: TObject);
    procedure actCancelarExecute(Sender: TObject);
    procedure actCerrarExecute(Sender: TObject);
    procedure actAnadirUpdate(Sender: TObject);
    procedure actEliminarUpdate(Sender: TObject);
    procedure rdPagoPlazosClick(Sender: TObject);
  protected
    FFormaPago: IBizFormaPago;
    FPlazos : IBizFormaPagoPlazos;
    FSubCuentas: IBizSubCuenta;
    FSubCuentasController: TSubCuentasController;
    FController : IFormasPagoController;
    FPlazosController: IFormasPagoPlazosController;
    function GetFormaPago: IBizFormaPago;
    procedure SetFormaPago(const Value: IBizFormaPago);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property FormaPago: IBizFormaPago read GetFormaPago write SetFormaPago;
  end;


implementation
{$R *.dfm}

{ TfEditorFormasPago }

uses
  Dialogs, uDialogUtils, uDataModuleFormasPago;

function TfEditorFormaPago.GetFormaPago: IBizFormaPago;
begin
  Result := FFormaPago;
end;

procedure TfEditorFormaPago.rdPagoPlazosClick(Sender: TObject);
begin
  if rdPagoPlazos.Checked then
  begin
    panelPlazosDePago.Enabled := True;
    panelVencimiento.Enabled := False;
  end
  else
  begin
    panelPlazosDePago.Enabled := False;
    panelVencimiento.Enabled := True;
  end
end;

procedure TfEditorFormaPago.SetFormaPago(const Value: IBizFormaPago);
begin
  FFormaPago := Value;
  if Assigned(FFormaPago) then
  begin
    FPlazos := FFormaPago.Plazos;
    dsFormaPago.DataTable := FFormaPago.DataTable;
    dsPlazos.DataTable := FPlazos.DataTable;
    dsFormaPago.DataTable.Open;
    dsPlazos.DataTable.Open;
  end
  else begin
    dsFormaPago.DataTable := NIL;
    dsPlazos.DataTable := NIL;
  end;
end;

procedure TfEditorFormaPago.actAnadirExecute(Sender: TObject);
begin
  if Assigned(FFormaPago) and (FFormaPago.State = dsInsert) then
    FController.Guardar(FFormaPago);

  FPlazos.Append;
end;

procedure TfEditorFormaPago.actEliminarExecute(Sender: TObject);
begin
  FPlazos.Delete;
end;

procedure TfEditorFormaPago.actEliminarUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled := Assigned(FPlazos) and
                                 FPlazos.DataTable.Active and
                                 (FPlazos.DataTable.RecordCount > 0);
end;

constructor TfEditorFormaPago.Create(AOwner: TComponent);
begin
  inherited;
  FController := TFormasPagoController.Create;
  FPlazosController := TFormasPagoPlazosController.Create;
  FSubCuentasController := TSubCuentasController.Create;
  FSubCuentas := FSubCuentasController.BuscarCajasBancos;
  dsSubcuentas.DataTable := FSubCuentas.DataTable;
end;

destructor TfEditorFormaPago.Destroy;
begin
  dsSubcuentas.DataTable := Nil;
  FFormaPago := NIL;
  FSubCuentas := NIL;
  FSubCuentasController := NIL;
  FPlazosController := NIL;
  FController := NIL;
  inherited;
end;

procedure TfEditorFormaPago.actAceptarExecute(Sender: TObject);
begin
  if (ListaFormasPago.ActiveView.DataController.RecordCount = 0) then
    if (ShowConfirmMessage('Forma de pago sin plazos', 'No ha indicado plazos de pago para esta forma de pago por lo tanto no se podrán generarar los recibos correspondientes.' + #10#13 + '¿Desea continuar guardando la forma de pago?') = IDNO) then
      Exit;

  if FController.Guardar(FFormaPago) then
    actCerrar.Execute;
end;

procedure TfEditorFormaPago.actCancelarExecute(Sender: TObject);
begin
  FController.DescartarCambios(FFormaPago);
  actCerrar.Execute;
end;

procedure TfEditorFormaPago.actCerrarExecute(Sender: TObject);
begin
  Close;
end;

procedure TfEditorFormaPago.actAnadirUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled := Assigned(FPlazos) and
                                 FPlazos.DataTable.Active;
end;

procedure TfEditorFormaPago.FormShow(Sender: TObject);
begin
  rdPagoVencimiento.Checked := True;

  if not FSubCuentas.DataTable.Active then
     FSubCuentas.DataTable.Active := True;

  if not FFormaPago.DataTable.Active then
     FFormaPago.DataTable.Active := True;

  if FFormaPago.EsNuevo then
    Self.Caption := 'Nueva forma de pago'
  else
  begin
    Self.Caption := 'Modificar forma de pago';
    if (FFormaPago.Plazos.RecordCount > 0) then
         rdPagoPlazos.Checked := True;
  end;

end;

end.
