This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
LuisLeon_FactuGES/Source/Modulos/Recibos de proveedor/Controller/uPagosProveedorController.pas
2007-06-11 15:29:06 +00:00

216 lines
7.3 KiB
ObjectPascal

{
===============================================================================
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;
procedure AsignarID(APagosProveedor: IBizPagosProveedor; IDCabecera: Integer; AEsNuevo:Boolean);
end;
TPagosProveedorController = class(TSujeto, IPagosProveedorController)
protected
FDataModule : IDataModuleRecibosProveedor;
procedure AsignarDataModule;
procedure AsignarDatos(APagosProveedor: IBizPagosProveedor; IDCabecera: Integer);
public
constructor Create; virtual;
destructor Destroy; override;
procedure AsignarID(APagosProveedor: IBizPagosProveedor; IDCabecera: Integer; AEsNuevo:Boolean);
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;
procedure TPagosProveedorController.AsignarDatos(APagosProveedor: IBizPagosProveedor; IDCabecera: Integer);
begin
inherited;
APagosProveedor.Edit;
APagosProveedor.ID := FDataModule.GetNextID(APagosProveedor.DataTable.LogicalName);
APagosProveedor.ID_RECIBO := IDCabecera;
APagosProveedor.Post
end;
procedure TPagosProveedorController.AsignarID(APagosProveedor: IBizPagosProveedor; IDCabecera: Integer; AEsNuevo:Boolean);
begin
with APagosProveedor do
begin
DataTable.DisableControls;
try
begin
if not DataTable.Active then
DataTable.Active := True;
{ ¡¡¡¡ OJO !!!!
Para asignar el ID en los detalles hay
que tener en cuenta una cosa:
Si se cambia el ID, ese detalle ya no
pertenece a esa cabecera porque ya no se
cumple la condición de la relacion:
Master.ID = Detail.ID_PRESUPUESTO.
Por esa razón no sirve hacer un recorrido
desde el principio hasta el final porque
las detalles van desapareciendo según asignamos
el valor al campo ID y nos mueve aleatoriamente
la posición del registro actual.
Es mejor hacer un bucle sencillo hasta que
"se gasten" todos los detalles. Cuando el
RecordCount llegue a 0 quiere decir que hemos
tratado todos los detalles.
El bucle cambia en el caso de ser llamada esta funcion desde modificar
un presupuesto ya que en ese caso si que hay que hacer un recorrido
total de las tuplas de detalle.
}
if AEsNuevo then
begin
while RecordCount > 0 do
begin
DataTable.First;
AsignarDatos(APagosProveedor, IDCabecera);
end
end
else
begin
DataTable.First;
while not DataTable.EOF do
begin
if DataTable.FieldByName('ID').AsInteger < 0 then
AsignarDatos(APagosProveedor, IDCabecera);
DataTable.Next
end;
end;
end;
finally
DataTable.EnableControls;
end;
end;
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
Result := False;
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
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.