{
===============================================================================
  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 uPagosProveedorController;

interface

uses
  Classes, SysUtils, uDADataTable, uControllerBase, uIDataModuleRecibosProveedor,
  uBizPagosProveedor;

type
  IPagosProveedorController = interface(ISujeto)
  ['{4F907D80-B184-4557-BAB7-9FDA23260E64}']
    function Anadir(APagosProveedor: IBizPagosProveedor; Const Fecha: String = ''): Boolean;
    procedure Modificar(APagosProveedor: IBizPagosProveedor; Const Fecha: String);
    function Eliminar(APagoCliente : IBizPagosProveedor): Boolean;
    function EliminarTodo(APagossCliente : IBizPagosProveedor): Boolean;
  end;

  TPagosProveedorController = class(TSujeto, IPagosProveedorController)
  protected
    FDataModule : IDataModuleRecibosProveedor;
    procedure AsignarDataModule;

  public
    constructor Create; override;
    destructor Destroy; override;
    function Anadir(APagosProveedor: IBizPagosProveedor; Const Fecha: String = ''): Boolean;
    procedure Modificar(APagosProveedor: IBizPagosProveedor; Const Fecha: String);
    function Eliminar(APagoCliente : IBizPagosProveedor): Boolean;
    function EliminarTodo(APagosProveedor : IBizPagosProveedor): Boolean;
  end;

implementation

uses
  cxControls, DB, uEditorRegistryUtils,Dialogs,
  uDAInterfaces, uDataTableUtils, uDataModuleUsuarios,
  uDateUtils, uROTypes, DateUtils, Controls, Windows, Variants,
  schRecibosProveedorClient_Intf, uDataModuleRecibosProveedor;

{ TPagosProveedorController }

function TPagosProveedorController.Anadir(APagosProveedor: IBizPagosProveedor; Const Fecha: String = ''): Boolean;
{ Si el pago introducido es un pago y no una devolución devolvemos true en caso de ser
una devolución devolvemos false}
begin
  APagosProveedor.Append;
  if Length(Fecha) = 0 then
     APagosProveedor.FECHA_PAGO := Date
  else
     APagosProveedor.FECHA_PAGO := StrToDate(Fecha);

  if (APagosProveedor.DataTable.RecordCount = 0)
  or ((APagosProveedor.DataTable.RecordCount mod 2) = 0) then
    APagosProveedor.TIPO := CTE_PAGO
  else
    APagosProveedor.TIPO := CTE_DEVOLUCION;

  Result := (APagosProveedor.TIPO = CTE_PAGO);
  APagosProveedor.Post;
end;

procedure TPagosProveedorController.AsignarDataModule;
begin
  FDataModule := TDataModuleRecibosProveedor.Create(Nil);
end;

constructor TPagosProveedorController.Create;
begin
  AsignarDataModule;
end;

destructor TPagosProveedorController.Destroy;
begin
  FDataModule := NIL;
  inherited;
end;

function TPagosProveedorController.Eliminar(APagoCliente: IBizPagosProveedor): Boolean;
{ En el caso de eliminar un pago del recibo devuelve true, mientras que si lo que
se borra es una devolución devuelve false}
begin
  if not Assigned(APagoCliente) then
    raise Exception.Create ('IBizPagosProveedor no asignado');

  ShowHourglassCursor;
  try
    if (APagoCliente.State in dsEditModes) then
      APagoCliente.Cancel;

    APagoCliente.Last;
    Result := (APagoCliente.TIPO = CTE_PAGO);
    APagoCliente.Delete;
    //Todo lo haremos en memoria ya que los pagos no tienen entidad propia
    //APagosProveedor.DataTable.ApplyUpdates;
  finally
    HideHourglassCursor;
  end;
end;

function TPagosProveedorController.EliminarTodo(APagosProveedor: IBizPagosProveedor): Boolean;
begin
  Result := False;
  if Assigned(APagosProveedor) then
  begin
    if not APagosProveedor.DataTable.Active then
       APagosProveedor.DataTable.Active := True;
    APagosProveedor.DataTable.ClearRows;
    //Todo lo haremos en memoria ya que los pagos no tienen entidad propia
    //APagosProveedor.DataTable.ApplyUpdates;
  end;
end;

procedure TPagosProveedorController.Modificar(APagosProveedor: IBizPagosProveedor; const Fecha: String);
begin
  APagosProveedor.DataTable.Edit;
  APagosProveedor.FECHA_PAGO := StrToDate(Fecha);
  APagosProveedor.DataTable.Post;
end;

end.
