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/Modulos/Articulos proveedor/Controller/uDatosProveedorController.pas

200 lines
6.0 KiB
ObjectPascal
Raw Normal View History

unit uDatosProveedorController;
interface
uses
Classes, uDADataTable, uControllerBase, uProveedoresController,
uBizDatosProveedores, uIDataModuleArticulosProveedor;
type
IDatosProveedoresController = interface(ISujeto)
['{43A5AEDA-9DD2-4520-9AC1-5AB7F37336A7}']
procedure AssignarID(ADatosProveedores: IBizDatosProveedores; IDCabecera: Integer; EsModificacion:Boolean);
procedure Anadir(ADatosProveedores : IBizDatosProveedores);
procedure Eliminar(ADatosProveedores : IBizDatosProveedores);
procedure ElegirProveedor(ADatosProveedores : IBizDatosProveedores);
procedure AnadirProveedor(ADatosProveedores : IBizDatosProveedores);
procedure VerProveedor(ADatosProveedores : IBizDatosProveedores);
end;
TDatosProveedoresController = class(TSujeto, IDatosProveedoresController)
private
FProveedoresController: IProveedoresController;
protected
FDataModule : IDataModuleArticulosProveedor;
public
procedure Anadir(ADatosProveedores : IBizDatosProveedores);
procedure Eliminar(ADatosProveedores : IBizDatosProveedores);
procedure AssignarID(ADatosProveedores: IBizDatosProveedores; IDCabecera: Integer; EsModificacion:Boolean);
constructor Create;
destructor Destroy; override;
procedure ElegirProveedor(ADatosProveedores : IBizDatosProveedores);
procedure AnadirProveedor(ADatosProveedores : IBizDatosProveedores);
procedure VerProveedor(ADatosProveedores : IBizDatosProveedores);
end;
implementation
uses
DB, SysUtils, uDAInterfaces, Variants, uDataModuleArticulosProveedor,
uBizContactos, cxControls;
{ TDatosProveedorController }
procedure TDatosProveedoresController.Anadir(ADatosProveedores: IBizDatosProveedores);
begin
ADatosProveedores.Insert;
end;
procedure TDatosProveedoresController.AnadirProveedor(ADatosProveedores: IBizDatosProveedores);
var
AProveedor : IBizContacto;
begin
inherited;
AProveedor := (FProveedoresController.Nuevo as IBizProveedor);
FProveedoresController.Ver(AProveedor);
if Assigned(AProveedor) then
begin
if not ADatosProveedores.DataTable.Editing then
ADatosProveedores.Edit;
ADatosProveedores.ID_PROVEEDOR := AProveedor.ID;
ADatosProveedores.NOMBRE := AProveedor.NOMBRE;
end;
AProveedor := Nil;
end;
procedure TDatosProveedoresController.AssignarID(ADatosProveedores: IBizDatosProveedores;
IDCabecera: Integer; EsModificacion:Boolean);
begin
with ADatosProveedores do
begin
DataTable.DisableControls;
try
if not DataTable.Active then
DataTable.Active := True;
{ <EFBFBD><EFBFBD><EFBFBD><EFBFBD> OJO !!!!
Para asignar el ID en los Gastos 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<EFBFBD>n de la relacion:
Master.ID = Detail.ID_MONTAJE.
Por esa raz<EFBFBD>n no sirve hacer un recorrido
desde el principio hasta el final porque
las Gastos van desapareciendo seg<EFBFBD>n asignamos
el valor al campo ID y nos mueve aleatoriamente
la posici<EFBFBD>n del registro actual.
Es mejor hacer un bucle sencillo hasta que
"se gasten" todos los Gastos. Cuando el
RecordCount llegue a 0 quiere decir que hemos
tratado todos los Gastos.
El bucle cambia en el caso de ser llamada esta funcion desde modificar
un montaje ya que en ese caso s<EFBFBD> que hay que hacer un recorrido
total de las tuplas de detalle.
}
if not EsModificacion then
begin
while RecordCount > 0 do
begin
DataTable.First;
Edit;
ID := FDataModule.GetNextID(DataTable.LogicalName);
ID_ARTICULO := IDCabecera;
Post
end
end
else
begin
DataTable.First;
while not DataTable.EOF do
begin
if EsNuevo then
begin
Edit;
ID := FDataModule.GetNextID(DataTable.LogicalName);
ID_ARTICULO := IDCabecera;
Post
end;
DataTable.Next
end;
end;
finally
DataTable.EnableControls;
end;
end;
end;
constructor TDatosProveedoresController.Create;
begin
inherited;
FDataModule := TDataModuleArticulosProveedor.Create(Nil);
FProveedoresController := TProveedoresController.Create;
end;
destructor TDatosProveedoresController.Destroy;
begin
FDataModule := Nil;
FProveedoresController := Nil;
inherited;
end;
procedure TDatosProveedoresController.ElegirProveedor(ADatosProveedores: IBizDatosProveedores);
var
AProveedor : IBizContacto;
begin
inherited;
AProveedor := (FProveedoresController.ElegirContacto(FProveedoresController.BuscarTodos, '', False) as IBizProveedor);
if Assigned(AProveedor) then
begin
if not ADatosProveedores.DataTable.Editing then
ADatosProveedores.Edit;
ADatosProveedores.ID_PROVEEDOR := AProveedor.ID;
ADatosProveedores.NOMBRE := AProveedor.NOMBRE;
end;
AProveedor := Nil;
end;
procedure TDatosProveedoresController.Eliminar(ADatosProveedores: IBizDatosProveedores);
begin
if not Assigned(ADatosProveedores) then
raise Exception.Create ('Datos proveedor no asignado');
ShowHourglassCursor;
try
if (ADatosProveedores.State in dsEditModes) then
ADatosProveedores.Cancel;
ADatosProveedores.Delete;
finally
HideHourglassCursor;
end;
end;
procedure TDatosProveedoresController.VerProveedor(ADatosProveedores: IBizDatosProveedores);
var
AProveedor : IBizContacto;
begin
AProveedor := FProveedoresController.Buscar(ADatosProveedores.ID_PROVEEDOR);
FProveedoresController.Ver(AProveedor);
if Assigned(AProveedor) then
begin
if not ADatosProveedores.DataTable.Editing then
ADatosProveedores.Edit;
ADatosProveedores.ID_PROVEEDOR := AProveedor.ID;
ADatosProveedores.NOMBRE := AProveedor.NOMBRE;
end;
AProveedor := Nil;
end;
end.