unit uReferenciasController; interface uses Classes, SysUtils, uDADataTable, uControllerBase, uIDataModuleReferencias, uBizReferencias; type IReferenciasController = interface(IControllerBase) ['{832E33B0-3228-4519-A740-F551DF3004DD}'] function BuscarTodos: IBizReferencia; procedure VerTodos(AReferencias: IBizReferencia); function Guardar(AReferencia : IBizReferencia): Boolean; procedure DescartarCambios(AReferencia : IBizReferencia); end; TReferenciasController = class(TControllerBase, IReferenciasController) protected FDataModule : IDataModuleReferencias; // procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; procedure FiltrarEmpresa(AReferencias: IBizReferencia); function ValidarReferencia(AReferencia: IBizReferencia): Boolean; procedure AsignarDataModule; public constructor Create; override; destructor Destroy; override; function Guardar(AReferencia : IBizReferencia): Boolean; virtual; procedure DescartarCambios(AReferencia : IBizReferencia); virtual; function BuscarTodos: IBizReferencia; procedure VerTodos(AReferencias: IBizReferencia); end; implementation uses cxControls, DB, uEditorRegistryUtils, schReferenciasClient_Intf, uIEditorReferencias, uDataModuleReferencias, uFactuGES_App, uDAInterfaces, uDataTableUtils, uDialogUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows; { TReferenciasController } procedure TReferenciasController.AsignarDataModule; begin FDataModule := TDataModuleReferencias.Create(Nil); end; function TReferenciasController.BuscarTodos: IBizReferencia; begin Result := FDataModule.GetItems; FiltrarEmpresa(Result); end; procedure TReferenciasController.FiltrarEmpresa(AReferencias: IBizReferencia); var Condicion: TDAWhereExpression; Condicion1: TDAWhereExpression; Condicion2: TDAWhereExpression; begin if AReferencias.DataTable.Active then AReferencias.DataTable.Active := False; // Filtrar las facturas actuales por empresa with AReferencias.DataTable.DynamicWhere do begin // (ID_EMPRESA = ID) Condicion1 := NewBinaryExpression(NewField('', fld_ReferenciasID_EMPRESA), NewConstant(AppFactuGES.EmpresaActiva.ID, datInteger), dboEqual); // (ID_EMPRESA = NULL) Condicion2 := NewBinaryExpression(NewField('', fld_ReferenciasID_EMPRESA), NewNull(), dboEqual); Condicion := NewBinaryExpression(Condicion1, Condicion2, dboOr); if IsEmpty then Expression := Condicion else Expression := NewBinaryExpression(Expression, Condicion, dboAnd); end; end; constructor TReferenciasController.Create; begin inherited; AsignarDataModule; end; function TReferenciasController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); end; procedure TReferenciasController.DescartarCambios(AReferencia: IBizReferencia); begin if not Assigned(AReferencia) then raise Exception.Create ('Forma de pago no asignada'); ShowHourglassCursor; try if (AReferencia.State in dsEditModes) then AReferencia.Cancel; AReferencia.DataTable.CancelUpdates; finally HideHourglassCursor; end; end; destructor TReferenciasController.Destroy; begin FDataModule := NIL; inherited; end; function TReferenciasController.ValidarReferencia(AReferencia: IBizReferencia): Boolean; begin Result := False; if not Assigned(AReferencia) then raise Exception.Create ('Referencia no asignada'); if (AReferencia.DataTable.State in dsEditModes) then AReferencia.DataTable.Post; // if Length(AReferencia.VALOR) = 0 then // raise Exception.Create('Debe indicar un código para esta referencia.'); Result := True; end; procedure TReferenciasController.VerTodos(AReferencias: IBizReferencia); var AEditor : IEditorReferencias; begin AEditor := NIL; CreateEditor('EditorReferencias', IEditorReferencias, AEditor); if Assigned(AEditor) then try AEditor.Referencias := AReferencias; AEditor.ShowModal; finally AEditor.Release; AEditor := NIL; end; end; { procedure TReferenciasController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); begin inherited; // end; } function TReferenciasController.Guardar(AReferencia: IBizReferencia): Boolean; var NuevoID : Integer; begin Result := False; if ValidarReferencia(AReferencia) then begin ShowHourglassCursor; try AReferencia.DataTable.ApplyUpdates; Result := True; finally HideHourglassCursor; end; end; end; end.