{
===============================================================================
  Copyright (©) 2007. 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: 
  Versión actual: 1.0.0
  Fecha versión actual: 
===============================================================================
  Modificaciones:

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

unit uEditorRecibosProveedor;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, DB, uDADataTable, JvAppStorage,
  JvAppRegistryStorage, JvComponent, JvFormPlacement, ImgList,
  PngImageList, StdActns, ActnList, ComCtrls, TB2ExtItems, TBXExtItems,
  TBX, TB2Item, TB2Dock, TB2Toolbar, ExtCtrls, JvExControls,
  JvNavigationPane, uViewGrid, pngimage, JvComponentBase,
  JvExComCtrls, JvStatusBar, uViewBase, uViewBarraSeleccion, uViewGridBase,
  uEditorGridBase, uCustomView, 
  
  uBizRecibosProveedor, uIEditorRecibosProveedor, uRecibosProveedorController,
  uViewRecibosProveedor, uDAInterfaces, JSDialog;

type

  TfEditorRecibosProveedor = class(TfEditorGridBase, IEditorRecibosProveedor)
    frViewRecibosProveedor1: TfrViewRecibosProveedor;
    actInformes: TAction;
    TBXItem38: TTBXItem;
    JSInformesDialog: TJSDialog;
    procedure FormShow(Sender: TObject);
    procedure actEliminarUpdate(Sender: TObject);
    procedure actInformesExecute(Sender: TObject);
  private
    FRecibosProveedor: IBizRecibosProveedor;
    FController : IRecibosProveedorController;
  protected
    function GetRecibosProveedor: IBizRecibosProveedor;
    procedure SetRecibosProveedor(const Value: IBizRecibosProveedor);
    function GetController : IRecibosProveedorController;
    procedure SetController (const Value : IRecibosProveedorController);

    procedure NuevoInterno; override;
    procedure EliminarInterno; override;
    procedure ModificarInterno; override;
    procedure DuplicarInterno; override;
    procedure ImprimirInterno; override;
    procedure PrevisualizarInterno; override;
  public
    procedure PonerTitulos(const ATitulo: string = ''); override;
    property RecibosProveedor: IBizRecibosProveedor read GetRecibosProveedor write SetRecibosProveedor;
    property Controller : IRecibosProveedorController read GetController write SetController;

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;


implementation

uses
  uDataModuleRecibosProveedor, uFactuGES_App, uDataModuleUsuarios, uGridUtils, uDBSelectionListUtils,
  uGestorInformesController;

{$R *.dfm}

{
*************************** TfEditorRecibosProveedor ***************************
}
procedure TfEditorRecibosProveedor.actEliminarUpdate(Sender: TObject);
begin
  inherited;
  if (Sender as TAction).Enabled then
     (Sender as TAction).Enabled := (FRecibosProveedor.SITUACION = CTE_PENDIENTE) AND (FRecibosProveedor.ID_FACTURA < 1);
end;

procedure TfEditorRecibosProveedor.actInformesExecute(Sender: TObject);
var
  Respuesta : Integer;
  AGestorInformesController : IGestorInformesController;

begin
  AGestorInformesController := TGestorInformesController.Create;
  try

    Respuesta := JsInformesDialog.Execute;

    if Respuesta <> IDCANCEL then
    begin
      case JsInformesDialog.CustomButtonResult of
        100 : begin   // Listado de recibos pendientes
                AGestorInformesController.VerInformeListadoRecibosProvPendientes;
              end;
        200 : begin   // Listado de recibos de cliente
                AGestorInformesController.VerInformeListadoRecibosProveedor;
              end;
      end;
    end;

  finally
    AGestorInformesController := NIL;
  end;
end;

constructor TfEditorRecibosProveedor.Create(AOwner: TComponent);
begin
  inherited;
  FController := TRecibosProveedorController.Create;
  ViewGrid := frViewRecibosProveedor1; //  CreateView(TfrViewRecibosProveedor) as IViewRecibosProveedor;
end;

destructor TfEditorRecibosProveedor.Destroy;
begin
  FRecibosProveedor := NIL;
  FController := NIL;
  inherited;
end;

procedure TfEditorRecibosProveedor.DuplicarInterno;
begin
// No se pueden duplicar recibos
end;

procedure TfEditorRecibosProveedor.EliminarInterno;
var
  ARecibos: IBizRecibosProveedor;
  AllItems: Boolean;
begin
  ARecibos := Nil;
  AllItems := False;

  if MultiSelect and Assigned(ViewGrid) then
     AllItems :=  (ViewGrid.NumSeleccionados > 1);

  if AllItems then
  begin
    if (Application.MessageBox('¿Desea borrar los recibos de proveedor seleccionados?', 'Atención', MB_YESNO) = IDYES) then
    begin
      SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (RecibosProveedor as ISeleccionable).SelectedRecords);
      ARecibos := (Controller as IRecibosProveedorController).ExtraerSeleccionados(RecibosProveedor) as IBizRecibosProveedor;
    end
  end
  else begin
    if (Application.MessageBox('¿Desea borrar el recibo de proveedor seleccionado?', 'Atención', MB_YESNO) = IDYES) then
        ARecibos := RecibosProveedor;
  end;

  if Assigned(ARecibos) then
  begin
    FController.Eliminar(ARecibos, AllItems);
    if AllItems then
    begin
      if (ARecibos.DataTable.RecordCount > 0) then
      begin
        with  ARecibos.DataTable do
        begin
          First;
          while not EOF do
          begin
//            JsListaPresupuestosNoEliminados.Content.Add('Ref. Presupuesto: ' + APresupuestos.REFERENCIA + '  ' + APresupuestos.NOMBRE);
            Next;
          end;
        end;
//        JsListaRecibosNoEliminados.Execute;
      end;
      actRefrescar.Execute;
    end;
  end;

  ViewGrid.GotoFirst;
end;

procedure TfEditorRecibosProveedor.FormShow(Sender: TObject);
begin
  inherited;

  if not Assigned(ViewGrid) then
    raise Exception.Create('No hay ninguna vista asignada');

  if not Assigned(FRecibosProveedor) then
    raise Exception.Create('No hay ningún objeto asignado');

  FRecibosProveedor.DataTable.Active := True;
  ViewGrid.GotoFirst;  
  //Para que coja el ancho automático
  actAnchoAuto.Execute;  
end;

function TfEditorRecibosProveedor.GetController: IRecibosProveedorController;
begin
  Result := FController;
end;

function TfEditorRecibosProveedor.GetRecibosProveedor: IBizRecibosProveedor;
begin
  Result := FRecibosProveedor;
end;

procedure TfEditorRecibosProveedor.ImprimirInterno;
begin
  inherited;
end;

procedure TfEditorRecibosProveedor.ModificarInterno;
begin
  inherited;
  FController.Ver(FRecibosProveedor);
  RefrescarInterno;  
end;

procedure TfEditorRecibosProveedor.NuevoInterno;
begin
//Se pueden añadir recibos nuevos sin tener factura asociada, ya que acana emite recibos independientes a las facturas
//por ser particulares en lugar de empresas el cliente final.
  FController.Anadir(FRecibosProveedor);
  FController.Ver(FRecibosProveedor);
end;

procedure TfEditorRecibosProveedor.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
  FTitulo := 'Lista de recibos de proveedor - ' + AppFactuGES.EmpresaActiva.NOMBRE;
  inherited PonerTitulos(FTitulo);
end;

procedure TfEditorRecibosProveedor.PrevisualizarInterno;
begin
  inherited;
end;

procedure TfEditorRecibosProveedor.SetController(const Value: IRecibosProveedorController);
begin
  FController := Value;
end;

procedure TfEditorRecibosProveedor.SetRecibosProveedor(const Value: IBizRecibosProveedor);
begin
  FRecibosProveedor := Value;
  dsDataTable.DataTable := FRecibosProveedor.DataTable;
  if Assigned(ViewGrid) then
    (ViewGrid as IViewRecibosProveedor).Recibos := FRecibosProveedor;
end;

end.
  