git-svn-id: https://192.168.0.254/svn/Proyectos.ConstruccionesCNJ_FactuGES/trunk@4 6cb6b671-b4a0-dd4c-8bdc-3006503d97e9
534 lines
15 KiB
ObjectPascal
534 lines
15 KiB
ObjectPascal
unit uMontajesController;
|
||
|
||
interface
|
||
|
||
|
||
uses
|
||
Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem,
|
||
uIDataModuleMontajes,
|
||
uClientesController, uBizMontajes;
|
||
|
||
type
|
||
IMontajesController = interface(IObservador)
|
||
['{84A6AB42-D89D-4BA8-8B0C-594B96CA0C13}']
|
||
function GetClienteController: IClientesController;
|
||
procedure SetClienteController(const Value: IClientesController);
|
||
property ClienteController: IClientesController read GetClienteController write SetClienteController;
|
||
|
||
function Buscar(const ID: Integer): IBizMontaje;
|
||
function BuscarTodos: IBizMontaje;
|
||
procedure Ver(AMontaje : IBizMontaje);
|
||
procedure VerTodos(AMontajes: IBizMontaje);
|
||
function Nuevo : IBizMontaje; overload;
|
||
procedure Anadir(AMontaje : IBizMontaje);
|
||
procedure Eliminar(const ID : Integer); overload;
|
||
procedure Eliminar(AMontaje : IBizMontaje); overload;
|
||
procedure Guardar(AMontaje : IBizMontaje);
|
||
procedure DescartarCambios(AMontaje : IBizMontaje);
|
||
function Existe(const ID: Integer) : Boolean;
|
||
function Duplicar(AMontaje: IBizMontaje): IBizMontaje;
|
||
procedure Preview(AMontaje : IBizMontaje);
|
||
procedure Print(AMontaje : IBizMontaje);
|
||
procedure RecuperarCliente(AMontaje : IBizMontaje);
|
||
function CambiarSituacion(AMontaje: IBizMontaje; ASituacion : String; AFecha: TDateTime = 0; DoPost: Boolean = True): Boolean; overload;
|
||
function CambiarSituacion(AMontaje: IBizMontaje): Boolean; overload;
|
||
|
||
function ElegirMontaje(AMontajes : IBizMontaje; AMensaje: String; AMultiSelect: Boolean): IBizMontaje;
|
||
function ExtraerSeleccionados(AMontajes: IBizMontaje) : IBizMontaje;
|
||
end;
|
||
|
||
TMontajesController = class(TObservador, IMontajesController)
|
||
protected
|
||
FDataModule : IDataModuleMontajes;
|
||
FClienteController : IClientesController;
|
||
|
||
function GetClienteController: IClientesController;
|
||
procedure SetClienteController(const Value: IClientesController);
|
||
|
||
procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
|
||
function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean;
|
||
function _Vacio : IBizMontaje;
|
||
|
||
procedure FiltrarEmpresa(AMontaje: IBizMontaje);
|
||
function ValidarSituacion(ASituacion: String; AFechaIni: TDateTime; var AFechaFin: TDateTime): Boolean;
|
||
|
||
//Estos son los tres m<>todos a sobre escribir si se desea heredar toda la logica de
|
||
//este controller
|
||
procedure AsignarDataModule; virtual;
|
||
procedure RecuperarObjetos(AMontaje: IBizMontaje); virtual;
|
||
procedure AsignarEditor(out AEditor: IEditorDBItem); virtual;
|
||
|
||
function ValidarMontaje(AMontaje: IBizMontaje): Boolean; virtual;
|
||
procedure AsignarID(AMontaje: IBizMontaje; NuevoID:Integer); virtual;
|
||
|
||
public
|
||
property ClienteController: IClientesController read GetClienteController write SetClienteController;
|
||
|
||
constructor Create;
|
||
destructor Destroy; override;
|
||
|
||
procedure Eliminar(const ID : Integer); overload;
|
||
procedure Eliminar(AMontaje : IBizMontaje); overload;
|
||
procedure Guardar(AMontaje : IBizMontaje); virtual;
|
||
procedure DescartarCambios(AMontaje : IBizMontaje); virtual;
|
||
function Existe(const ID: Integer) : Boolean; virtual;
|
||
procedure Anadir(AMontaje : IBizMontaje);
|
||
function Buscar(const ID: Integer): IBizMontaje;
|
||
function BuscarTodos: IBizMontaje;
|
||
function Nuevo : IBizMontaje; overload;
|
||
procedure Ver(AMontaje : IBizMontaje);
|
||
procedure VerTodos(AMontajes: IBizMontaje);
|
||
function Duplicar(AMontaje: IBizMontaje): IBizMontaje;
|
||
procedure Preview(AMontaje : IBizMontaje);
|
||
procedure Print(AMontaje : IBizMontaje);
|
||
procedure RecuperarCliente(AMontaje : IBizMontaje);
|
||
function ElegirMontaje(AMontajes : IBizMontaje; AMensaje: String; AMultiSelect: Boolean): IBizMontaje;
|
||
function ExtraerSeleccionados(AMontajes: IBizMontaje) : IBizMontaje;
|
||
function CambiarSituacion(AMontaje: IBizMontaje; ASituacion : String; AFecha: TDateTime = 0; DoPost: Boolean = True): Boolean; overload;
|
||
function CambiarSituacion(AMontaje: IBizMontaje): Boolean; overload;
|
||
end;
|
||
|
||
implementation
|
||
|
||
uses
|
||
cxControls, DB, uEditorRegistryUtils, schMontajesClient_Intf,
|
||
uBizContactos, uIEditorMontajes, uIEditorMontaje, uDataModuleMontajes,
|
||
uIEditorElegirMontajes, variants,
|
||
uDataModuleUsuarios, uDAInterfaces, uDataTableUtils, uIEditorSituacionMontaje,
|
||
uDateUtils, uROTypes, DateUtils, Controls;
|
||
|
||
{ TMontajesController }
|
||
|
||
procedure TMontajesController.Anadir(AMontaje: IBizMontaje);
|
||
begin
|
||
AMontaje.Insert;
|
||
AMontaje.Cliente := (FClienteController.Nuevo as IBizCliente);
|
||
end;
|
||
|
||
procedure TMontajesController.AsignarDataModule;
|
||
begin
|
||
FDataModule := TDataModuleMontajes.Create(Nil);
|
||
end;
|
||
|
||
procedure TMontajesController.AsignarEditor(out AEditor: IEditorDBItem);
|
||
begin
|
||
CreateEditor('EditorMontaje', IEditorMontaje, AEditor);
|
||
end;
|
||
|
||
procedure TMontajesController.AsignarID(AMontaje: IBizMontaje; NuevoID:Integer);
|
||
begin
|
||
if not Assigned(AMontaje) then
|
||
raise Exception.Create ('Montaje no asignada');
|
||
|
||
if AMontaje.EsNuevo then
|
||
begin
|
||
AMontaje.Edit;
|
||
AMontaje.ID := NuevoID;
|
||
AMontaje.Post;
|
||
end;
|
||
end;
|
||
|
||
function TMontajesController.Buscar(const ID: Integer): IBizMontaje;
|
||
begin
|
||
Result := (FDataModule as IDataModuleMontajes).GetItem(ID);
|
||
FiltrarEmpresa(Result);
|
||
end;
|
||
|
||
function TMontajesController.BuscarTodos: IBizMontaje;
|
||
begin
|
||
Result := FDataModule.GetItems;
|
||
FiltrarEmpresa(Result);
|
||
end;
|
||
|
||
function TMontajesController.CambiarSituacion(AMontaje: IBizMontaje; ASituacion: String; AFecha: TDateTime; DoPost: Boolean): Boolean;
|
||
begin
|
||
Result := False;
|
||
|
||
// Validar la situaci<63>n del montaje
|
||
if ValidarSituacion(ASituacion, AMontaje.FECHA_INICIO, AFecha) then
|
||
begin
|
||
ShowHourglassCursor;
|
||
AMontaje.DataTable.DisableControls;
|
||
try
|
||
AMontaje.Edit;
|
||
AMontaje.SITUACION := ASituacion;
|
||
if ASituacion = SITUACION_MONTAJE_EJECUCION then
|
||
begin
|
||
if AFecha <> AMontaje.FECHA_INICIO then
|
||
AMontaje.FECHA_INICIO := AFecha;
|
||
end
|
||
else if ASituacion = SITUACION_MONTAJE_TERMINADO then
|
||
begin
|
||
if AFecha <> AMontaje.FECHA_FIN then
|
||
AMontaje.FECHA_FIN := AFecha;
|
||
end
|
||
else if ASituacion = SITUACION_MONTAJE_PENDIENTE then
|
||
begin
|
||
AMontaje.DataTable.FieldByName(fld_MontajesFECHA_INICIO).AsVariant := Null;
|
||
AMontaje.DataTable.FieldByName(fld_MontajesFECHA_Fin).AsVariant := Null;
|
||
end;
|
||
AMontaje.Post;
|
||
if DoPost then
|
||
Guardar(AMontaje);
|
||
Result := True;
|
||
finally
|
||
AMontaje.DataTable.EnableControls;
|
||
HideHourglassCursor;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
function TMontajesController.CambiarSituacion(AMontaje: IBizMontaje): Boolean;
|
||
var
|
||
AEditor : IEditorSituacionMontaje;
|
||
begin
|
||
AEditor := NIL;
|
||
ShowHourglassCursor;
|
||
try
|
||
RecuperarCliente(AMontaje);
|
||
CreateEditor('EditorSituacionMontaje', IEditorSituacionMontaje, AEditor);
|
||
with AEditor do
|
||
begin
|
||
Controller := Self; //OJO ORDEN MUY IMPORTANTE
|
||
Montaje := AMontaje;
|
||
end;
|
||
finally
|
||
HideHourglassCursor;
|
||
end;
|
||
|
||
if Assigned(AEditor) then
|
||
AEditor.ShowModal;
|
||
end;
|
||
|
||
constructor TMontajesController.Create;
|
||
begin
|
||
AsignarDataModule;
|
||
FClienteController := TClientesController.Create;
|
||
end;
|
||
|
||
function TMontajesController.CreateEditor(const AName: String;
|
||
const IID: TGUID; out Intf): Boolean;
|
||
begin
|
||
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
|
||
end;
|
||
|
||
procedure TMontajesController.DescartarCambios(AMontaje: IBizMontaje);
|
||
begin
|
||
if not Assigned(AMontaje) then
|
||
raise Exception.Create ('Montaje no asignado');
|
||
|
||
ShowHourglassCursor;
|
||
try
|
||
if (AMontaje.State in dsEditModes) then
|
||
AMontaje.Cancel;
|
||
|
||
AMontaje.DataTable.CancelUpdates;
|
||
finally
|
||
HideHourglassCursor;
|
||
end;
|
||
end;
|
||
|
||
destructor TMontajesController.Destroy;
|
||
begin
|
||
FDataModule := Nil;
|
||
FClienteController := Nil;
|
||
inherited;
|
||
end;
|
||
|
||
function TMontajesController.Duplicar(AMontaje: IBizMontaje): IBizMontaje;
|
||
begin
|
||
Result := Self._Vacio;
|
||
ShowHourglassCursor;
|
||
try
|
||
DuplicarRegistros(AMontaje.DataTable, Result.DataTable, mdrActual);
|
||
|
||
// Hay que dejar algunos campos como si fuera un montaje nuevo
|
||
Result.Edit;
|
||
with Result do
|
||
begin
|
||
ID_EMPRESA := dmUsuarios.IDEmpresaActual;
|
||
USUARIO := dmUsuarios.LoginInfo.Usuario;
|
||
REFERENCIA := ''; //Para que asigne uno nuevo
|
||
FECHA_INICIO := DateOf(Now);
|
||
end;
|
||
|
||
Result.Post;
|
||
finally
|
||
HideHourglassCursor;
|
||
end;
|
||
end;
|
||
|
||
function TMontajesController.ValidarMontaje(AMontaje: IBizMontaje): Boolean;
|
||
var
|
||
AFechaPagado : TDateTime;
|
||
begin
|
||
Result := False;
|
||
|
||
if not Assigned(AMontaje) then
|
||
raise Exception.Create ('Montaje no asignada');
|
||
|
||
if (AMontaje.DataTable.State in dsEditModes) then
|
||
AMontaje.DataTable.Post;
|
||
|
||
//Validamos
|
||
if (AMontaje.ID_CLIENTE < 0) or
|
||
(not Assigned(AMontaje.Cliente)) or
|
||
(AMontaje.Cliente.IsEmpty) then
|
||
raise Exception.Create('Debe indicar el cliente de este montaje');
|
||
|
||
// Asegurarse de valores en campos "autom<6F>ticos"
|
||
AMontaje.Edit;
|
||
try
|
||
AMontaje.USUARIO := dmUsuarios.LoginInfo.Usuario;
|
||
|
||
if Assigned(AMontaje.Cliente) then
|
||
AMontaje.ID_CLIENTE := AMontaje.Cliente.ID;
|
||
|
||
Result := True;
|
||
finally
|
||
AMontaje.Post;
|
||
end;
|
||
end;
|
||
|
||
function TMontajesController.ValidarSituacion(ASituacion: String;
|
||
AFechaIni: TDateTime; var AFechaFin: TDateTime): Boolean;
|
||
begin
|
||
Result := False;
|
||
if ASituacion = SITUACION_MONTAJE_EJECUCION then
|
||
if (EsFechaVacia(AFechaFin)) then
|
||
raise Exception.Create('Hay que indicar una fecha de inicio');
|
||
|
||
if ASituacion = SITUACION_MONTAJE_TERMINADO then
|
||
begin
|
||
if (EsFechaVacia(AFechaFin)) then
|
||
raise Exception.Create('Hay que indicar una fecha de finalizaci<63>n')
|
||
else if (AFechaIni < AFechaFin) then
|
||
raise Exception.Create('La fecha de finalizaci<63>n debe ser posterior a la fecha de inicio');
|
||
end;
|
||
Result := True;
|
||
end;
|
||
|
||
procedure TMontajesController.Ver(AMontaje: IBizMontaje);
|
||
var
|
||
AEditor : IEditorDBItem;
|
||
begin
|
||
AEditor := NIL;
|
||
ShowHourglassCursor;
|
||
try
|
||
RecuperarObjetos(AMontaje);
|
||
AsignarEditor(AEditor);
|
||
|
||
with (AEditor as IEditorMontaje) do
|
||
begin
|
||
Controller := Self; //OJO ORDEN MUY IMPORTANTE
|
||
Montaje := AMontaje;
|
||
end;
|
||
finally
|
||
HideHourglassCursor;
|
||
end;
|
||
|
||
if Assigned(AEditor) then
|
||
AEditor.ShowModal;
|
||
end;
|
||
|
||
procedure TMontajesController.VerTodos(AMontajes: IBizMontaje);
|
||
var
|
||
AEditor : IEditorMontajes;
|
||
begin
|
||
AEditor := NIL;
|
||
ShowHourglassCursor;
|
||
try
|
||
CreateEditor('EditorMontajes', IEditorMontajes, AEditor);
|
||
with AEditor do
|
||
begin
|
||
Controller := Self; //OJO ORDEN MUY IMPORTANTE
|
||
Montajes := AMontajes;
|
||
end;
|
||
finally
|
||
HideHourglassCursor;
|
||
end;
|
||
|
||
if Assigned(AEditor) then
|
||
AEditor.ShowEmbedded;
|
||
end;
|
||
|
||
function TMontajesController._Vacio: IBizMontaje;
|
||
begin
|
||
Result := Buscar(ID_NULO);
|
||
end;
|
||
|
||
procedure TMontajesController.Eliminar(const ID: Integer);
|
||
var
|
||
AMontaje : IBizMontaje;
|
||
begin
|
||
AMontaje := Buscar(ID);
|
||
|
||
if not Assigned(AMontaje) then
|
||
raise Exception.Create(Format('No se ha encontrado el montaje con ID = %d', [ID]));
|
||
|
||
Eliminar(AMontaje);
|
||
AMontaje := NIL;
|
||
end;
|
||
|
||
function TMontajesController.ElegirMontaje(AMontajes: IBizMontaje; AMensaje: String; AMultiSelect: Boolean): IBizMontaje;
|
||
var
|
||
AEditor : IEditorElegirMontajes;
|
||
begin
|
||
Result := NIL;
|
||
|
||
CreateEditor('EditorElegirMontajes', IEditorElegirMontajes, AEditor);
|
||
try
|
||
with AEditor do
|
||
begin
|
||
Montajes := AMontajes;
|
||
Controller := Self;
|
||
MultiSelect := AMultiSelect;
|
||
if IsPositiveResult(ShowModal) then
|
||
Result := MontajesSeleccionados;
|
||
end;
|
||
finally
|
||
AEditor := NIL;
|
||
end;
|
||
end;
|
||
|
||
procedure TMontajesController.Eliminar(AMontaje: IBizMontaje);
|
||
begin
|
||
if not Assigned(AMontaje) then
|
||
raise Exception.Create ('Montaje no asignada');
|
||
|
||
ShowHourglassCursor;
|
||
try
|
||
if (AMontaje.State in dsEditModes) then
|
||
AMontaje.Cancel;
|
||
|
||
AMontaje.Delete;
|
||
AMontaje.DataTable.ApplyUpdates;
|
||
finally
|
||
HideHourglassCursor;
|
||
end;
|
||
end;
|
||
|
||
procedure TMontajesController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
|
||
begin
|
||
inherited;
|
||
//
|
||
end;
|
||
|
||
procedure TMontajesController.RecuperarCliente(AMontaje: IBizMontaje);
|
||
begin
|
||
AMontaje.Cliente := (FClienteController.Buscar(AMontaje.ID_CLIENTE) as IBizCliente);
|
||
end;
|
||
|
||
procedure TMontajesController.RecuperarObjetos(AMontaje: IBizMontaje);
|
||
begin
|
||
if not Assigned(AMontaje.Cliente)
|
||
or (AMontaje.ID_CLIENTE <> AMontaje.Cliente.ID) then
|
||
RecuperarCliente(AMontaje);
|
||
end;
|
||
|
||
function TMontajesController.Existe(const ID: Integer): Boolean;
|
||
var
|
||
AMontaje : IBizMontaje;
|
||
begin
|
||
try
|
||
AMontaje := Buscar(ID);
|
||
Result := Assigned(AMontaje) and (AMontaje.ID = ID);
|
||
finally
|
||
AMontaje := NIL;
|
||
end;
|
||
end;
|
||
|
||
function TMontajesController.ExtraerSeleccionados(AMontajes: IBizMontaje): IBizMontaje;
|
||
var
|
||
ASeleccionados : IBizMontaje;
|
||
begin
|
||
ASeleccionados := Self.Buscar(ID_NULO);
|
||
CopyDataTable(AMontajes.DataTable, ASeleccionados.DataTable, True);
|
||
Result := ASeleccionados;
|
||
end;
|
||
|
||
procedure TMontajesController.FiltrarEmpresa(AMontaje: IBizMontaje);
|
||
begin
|
||
if AMontaje.DataTable.Active then
|
||
AMontaje.DataTable.Active := False;
|
||
|
||
// Filtrar los montajes actuales por empresa
|
||
with AMontaje.DataTable.Where do
|
||
begin
|
||
if NotEmpty then
|
||
AddOperator(opAND);
|
||
AddCondition(fld_MontajesID_EMPRESA, cEqual, dmUsuarios.IDEmpresaActual);
|
||
end;
|
||
end;
|
||
|
||
procedure TMontajesController.SetClienteController(const Value: IClientesController);
|
||
begin
|
||
FClienteController := Value;
|
||
end;
|
||
|
||
procedure TMontajesController.Guardar(AMontaje: IBizMontaje);
|
||
var
|
||
NuevoID: Integer;
|
||
begin
|
||
if ValidarMontaje(AMontaje) then
|
||
begin
|
||
ShowHourglassCursor;
|
||
try
|
||
if (AMontaje.EsNuevo) then
|
||
NuevoID := FDataModule.GetNextID(AMontaje.DataTable.LogicalName)
|
||
else
|
||
NuevoID := AMontaje.ID;
|
||
|
||
AsignarID(AMontaje, NuevoID);
|
||
AMontaje.DataTable.ApplyUpdates;
|
||
finally
|
||
HideHourglassCursor;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
function TMontajesController.Nuevo: IBizMontaje;
|
||
var
|
||
AMontaje : IBizMontaje;
|
||
begin
|
||
AMontaje := FDataModule.NewItem;
|
||
FiltrarEmpresa(AMontaje);
|
||
AMontaje.DataTable.Active := True;
|
||
AMontaje.Insert;
|
||
AMontaje.Cliente := (FClienteController.Nuevo as IBizCliente);
|
||
Result := AMontaje;
|
||
end;
|
||
|
||
procedure TMontajesController.Preview(AMontaje: IBizMontaje);
|
||
//var
|
||
// AReportController : IMontajesReportController;
|
||
begin
|
||
{ AReportController := TMontajesReportController.Create;
|
||
try
|
||
AReportController.Preview(AMontaje.ID);
|
||
finally
|
||
AReportController := NIL;
|
||
end;
|
||
}
|
||
end;
|
||
|
||
procedure TMontajesController.Print(AMontaje: IBizMontaje);
|
||
//var
|
||
// AReportController : IMontajesReportController;
|
||
begin
|
||
{ AReportController := TMontajesReportController.Create;
|
||
try
|
||
AReportController.Print(AMontaje.ID);
|
||
finally
|
||
AReportController := NIL;
|
||
end;
|
||
}
|
||
end;
|
||
|
||
function TMontajesController.GetClienteController: IClientesController;
|
||
begin
|
||
Result := FClienteController;
|
||
end;
|
||
|
||
end.
|