unit uBizAlmacenes; interface uses uDAInterfaces, uDADataTable, schAlmacenesClient_Intf, Classes, DBGrids, uDBSelectionList, DB, uExceptions, Controls; type IBizAlmacen = interface(IALMACENES) ['{D9479C4B-52EA-4DB6-9F8F-4B8B758EF80A}'] procedure Show; procedure ShowAll; procedure Preview; function ShowForSelect : TModalResult; end; TBizAlmacenDataTableRules = class(TALMACENESDataTableRules, IBizAlmacen, IApplyUpdateFailedException, ISelectedRowList) private FSelectedRows : TSelectedRowList; procedure ShowToSelect; procedure BeforeApplyUpdates(Sender: TDADataTable; const Delta: IDADelta); procedure OnPostError(DataTable: TDADataTable; Error: EDatabaseError; var Action: TDataAction); override; protected procedure OnNewRecord(Sender: TDADataTable); override; function GetSelectedRows : TSelectedRowList; virtual; procedure ShowApplyUpdateFailed (const Error: EDAApplyUpdateFailed); virtual; procedure BeforeDelete(Sender: TDADataTable); override; public constructor Create(aDataTable: TDADataTable); override; destructor Destroy; override; procedure Show; virtual; procedure ShowAll; virtual; procedure Preview; virtual; function ShowForSelect : TModalResult; virtual; property SelectedRows : TSelectedRowList read GetSelectedRows; end; procedure ValidarAlmacen (const AAlmacen : IBizAlmacen); implementation uses Windows, Dialogs, uDACDSDataTable, SysUtils, uDataModuleBase, uDataModuleUsuarios, uEditorUtils, uDataModuleAlmacenes, Variants; procedure ValidarAlmacen (const AAlmacen : IBizAlmacen); begin // end; { TBizAlmacenDataTableRules } { ************************** TBizAlmacenDataTableRules ************************** } procedure TBizAlmacenDataTableRules.OnNewRecord(Sender: TDADataTable); begin inherited; CODIGOEMPRESA := dmBase.CodigoEmpresa; USUARIO := dmUsuarios.LoginInfo.UserID; FECHAALTA := Date; end; procedure TBizAlmacenDataTableRules.Show; begin ShowEditor(IBizAlmacen, Self, etItem); end; procedure TBizAlmacenDataTableRules.Preview; begin // dmContactos.Preview; end; procedure TBizAlmacenDataTableRules.ShowApplyUpdateFailed( const Error: EDAApplyUpdateFailed); begin if (Pos(AUF_FKVIOLATION, Error.Message) > 0) then MessageBox(0, 'No se puede borrar este almacén porque tiene articulos o está asociado al destino de algún pedido', 'Atención', MB_ICONWARNING or MB_OK); end; function TBizAlmacenDataTableRules.GetSelectedRows: TSelectedRowList; begin Result := FSelectedRows; end; procedure TBizAlmacenDataTableRules.ShowToSelect; begin // end; constructor TBizAlmacenDataTableRules.Create(aDataTable: TDADataTable); begin inherited; FSelectedRows := TSelectedRowList.Create(aDataTable); aDataTable.OnBeforeApplyUpdates := BeforeApplyUpdates; end; destructor TBizAlmacenDataTableRules.Destroy; begin FSelectedRows.Free; inherited; end; procedure TBizAlmacenDataTableRules.ShowAll; begin // ShowEditor(IBizProveedor, Self, etItems); end; function TBizAlmacenDataTableRules.ShowForSelect: TModalResult; begin Result := ShowEditor(IBizAlmacen, Self, etItems); end; procedure TBizAlmacenDataTableRules.BeforeApplyUpdates( Sender: TDADataTable; const Delta: IDADelta); var i: Integer; begin for i := 0 to Delta.Count - 1 do case Delta.Changes[i].ChangeType of ctInsert, ctUpdate : ValidarAlmacen(Self); // ctDelete : end; end; procedure TBizAlmacenDataTableRules.OnPostError(DataTable: TDADataTable; Error: EDatabaseError; var Action: TDataAction); begin inherited; Action := daAbort; if (Pos(AUF_HAVEVALUE, Error.Message) > 0) then begin if (Pos('Nombre', Error.Message) > 0) then MessageBox(0, 'Debe indicar al menos el nombre', 'Atención', MB_ICONWARNING or MB_OK) else raise Error; end else raise Error; end; procedure TBizAlmacenDataTableRules.BeforeDelete(Sender: TDADataTable); begin inherited; if not dmAlmacenes.PuedoEliminarAlmacen(CODIGO) then raise Exception.Create('No se puede borrar este almacén porque tiene articulos o está asociado al destino de algún pedido'); end; initialization RegisterDataTableRules('BizAlmacen', TBizAlmacenDataTableRules); finalization end.