unit uEditorRemesaCliente; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorDBItem, ToolWin, ComCtrls, JvExControls, JvComponent, uViewRemesaCliente, uBizRemesasCliente, JvNavigationPane, ActnList, uEditorBase, StdActns, TB2Dock, TB2Toolbar, TBX, ImgList, PngImageList, TB2Item, uEditorItem, DB, uDADataTable, uEditorDBBase, JvFormAutoSize, uDAScriptingProvider, uDACDSDataTable, StdCtrls, pngimage, ExtCtrls, TBXDkPanels, JvButton, AppEvnts, uCustomView, uViewBase, JvAppStorage, JvAppRegistryStorage, JvFormPlacement, JvComponentBase, uViewRemesasCliente, uIEditorRemesaCliente, uRemesasClienteController, JvExComCtrls, JvStatusBar, dxLayoutLookAndFeels, uViewGridBase, uViewGrid, uViewRecibosRemesaCliente; type TfEditorRemesaCliente = class(TfEditorDBItem, IEditorRemesaCliente) dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; frViewRemesaCliente1: TfrViewRemesaCliente; pagRecibos: TTabSheet; frViewRecibosRemesaCliente1: TfrViewRecibosRemesaCliente; TBXToolbar1: TTBXToolbar; TBXItem7: TTBXItem; TBXItem33: TTBXItem; actAnadirRecibos: TAction; actEliminarRecibo: TAction; procedure FormShow(Sender: TObject); procedure dsDataTableDataChange(Sender: TObject; Field: TField); procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction); procedure actAnadirRecibosExecute(Sender: TObject); procedure actEliminarReciboExecute(Sender: TObject); procedure JvFormStorageRestorePlacement(Sender: TObject); procedure JvFormStorageSavePlacement(Sender: TObject); private FHayCambios: Boolean; procedure setHayCambios(const Value: Boolean); property HayCambios: Boolean read FHayCambios write setHayCambios; protected FController : IRemesasClienteController; FRemesaCliente: IBizRemesaCliente; FViewRemesaCliente : IViewRemesaCliente; function GetController : IRemesasClienteController; procedure SetController (const Value : IRemesasClienteController); virtual; function GetRemesaCliente: IBizRemesaCliente; virtual; procedure SetRemesaCliente(const Value: IBizRemesaCliente); virtual; function GetViewRemesaCliente: IViewRemesaCliente; procedure SetViewRemesaCliente(const Value: IViewRemesaCliente); property ViewRemesaCliente: IViewRemesaCliente read GetViewRemesaCliente write SetViewRemesaCliente; procedure GuardarInterno; override; procedure EliminarInterno; override; procedure PonerTitulos(const ATitulo: string = ''); override; function GetModified: Boolean; override; procedure ActualizarEstadoEditor; override; public property RemesaCliente: IBizRemesaCliente read GetRemesaCliente write SetRemesaCliente; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation {$R *.dfm} uses uDataTableUtils, cxControls, uDialogUtils, uCustomEditor, uDataModuleRemesasCliente, uDataModuleBase, uBizFamilias, uFamiliasController; { ******************************* TfEditorRemesaCliente ******************************* } function TfEditorRemesaCliente.GetRemesaCliente: IBizRemesaCliente; begin Result := FRemesaCliente; end; function TfEditorRemesaCliente.GetController: IRemesasClienteController; begin Result := FController; end; function TfEditorRemesaCliente.GetModified: Boolean; var bCambiado : Boolean; begin bCambiado := inherited GetModified; //Si no hay cambios miramos que no los halla en la lista de recibos if not bCambiado then bCambiado := FHayCambios; Result := bCambiado; end; function TfEditorRemesaCliente.GetViewRemesaCliente: IViewRemesaCliente; begin Result := FViewRemesaCliente; end; procedure TfEditorRemesaCliente.GuardarInterno; var bEsNuevo : Boolean; begin inherited; bEsNuevo := False; ShowHourglassCursor; //frViewDetallesFacturaCliente1.SaveGridStatus; // Para guardar estado del grid // frViewDetallesFacturaCliente1.BeginUpdate; // Para que no se mueva el foco try bEsNuevo := FRemesaCliente.EsNuevo; FController.Guardar(FRemesaCliente); HayCambios := False; finally // frViewDetallesFacturaCliente1.EndUpdate; //frViewDetallesFacturaCliente1.RestoreGridStatus; HideHourglassCursor; end; if bEsNuevo then ShowInfoMessage('La remesa de cobro se ha dado de alta con el código ' + FRemesaCliente.REFERENCIA); Modified := False; end; procedure TfEditorRemesaCliente.JvFormStorageRestorePlacement(Sender: TObject); begin inherited; frViewRecibosRemesaCliente1.RestoreFromRegistry(JvAppRegistryStorage.Root); end; procedure TfEditorRemesaCliente.JvFormStorageSavePlacement(Sender: TObject); begin inherited; frViewRecibosRemesaCliente1.StoreToRegistry(JvAppRegistryStorage.Root); end; procedure TfEditorRemesaCliente.PonerTitulos(const ATitulo: string); var FTitulo : String; begin if Assigned(RemesaCliente) then begin if RemesaCliente.EsNuevo then FTitulo := 'Nueva remesa de cobro' else FTitulo := 'Remesa de cobro'; end; inherited PonerTitulos(FTitulo); end; procedure TfEditorRemesaCliente.SetRemesaCliente(const Value: IBizRemesaCliente); begin FRemesaCliente := Value; dsDataTable.DataTable := FRemesaCliente.DataTable; if Assigned(FViewRemesaCliente) and Assigned(RemesaCliente) then begin FViewRemesaCliente.RemesaCliente := RemesaCliente; frViewRecibosRemesaCliente1.Recibos := FRemesaCliente.Recibos; end; end; procedure TfEditorRemesaCliente.SetController(const Value: IRemesasClienteController); begin FController := Value; if Assigned(FController) then (ViewRemesaCliente as IViewRemesaCliente).Controller := (FController as IRemesasClienteController); end; procedure TfEditorRemesaCliente.setHayCambios(const Value: Boolean); begin FHayCambios := Value; ActualizarEstadoEditor; end; procedure TfEditorRemesaCliente.SetViewRemesaCliente(const Value: IViewRemesaCliente); begin FViewRemesaCliente := Value; if Assigned(FViewRemesaCliente) and Assigned(RemesaCliente) then FViewRemesaCliente.RemesaCliente := RemesaCliente; end; procedure TfEditorRemesaCliente.FormShow(Sender: TObject); begin inherited; HayCambios := False; if not Assigned(FViewRemesaCliente) then raise Exception.Create('No hay ninguna vista asignada'); if not Assigned(RemesaCliente) then raise Exception.Create('No hay ningún almacén asignado'); RemesaCliente.DataTable.Active := True; end; destructor TfEditorRemesaCliente.Destroy; begin // Utilizar mejor OnClose; inherited; end; procedure TfEditorRemesaCliente.actAnadirRecibosExecute(Sender: TObject); begin inherited; HayCambios := FController.ElegirRecibosCliente(RemesaCliente) OR HayCambios; end; procedure TfEditorRemesaCliente.actEliminarReciboExecute(Sender: TObject); begin inherited; FController.EliminarReciboCliente(RemesaCliente); HayCambios := True; end; procedure TfEditorRemesaCliente.ActualizarEstadoEditor; begin inherited; if not imgStatus.Visible then begin if (HayCambios) then begin StatusBar.Panels[0].Text := ' Se han producido cambios'; imgStatus.Visible := True; end end; end; constructor TfEditorRemesaCliente.Create(AOwner: TComponent); begin inherited; pgPaginas.ActivePageIndex := 0; FViewRemesaCliente := frViewRemesaCliente1; end; procedure TfEditorRemesaCliente.CustomEditorClose(Sender: TObject; var Action: TCloseAction); begin inherited; dsDataTable.DataTable := NIL; FViewRemesaCliente := NIL; FRemesaCliente := NIL; end; procedure TfEditorRemesaCliente.dsDataTableDataChange(Sender: TObject; Field: TField); begin inherited; if Assigned(FRemesaCliente) and (not (FRemesaCliente.DataTable.Fetching) or not (FRemesaCliente.DataTable.Opening) or not (FRemesaCliente.DataTable.Closing)) then PonerTitulos; end; procedure TfEditorRemesaCliente.EliminarInterno; begin if (Application.MessageBox('¿Desea borrar esta remesa de cobro?', 'Atención', MB_YESNO) = IDYES) then begin inherited; if not FController.Eliminar(FRemesaCliente) then actRefrescar.Execute; end; end; end.