unit uEditorRemesasCliente; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorBase, ToolWin, ComCtrls, JvExControls, JvComponent, JvNavigationPane, uViewRemesasCliente, uBizRemesasCliente, ActnList, DBActns, uViewGrid, Menus, uDataModuleBase, ImgList, PngImageList, TB2Dock, TB2Toolbar, TBX, TB2Item, StdActns, TB2ExtItems, TBXExtItems, TB2MRU, DB, uDADataTable, JvFormAutoSize, uDAScriptingProvider, uDACDSDataTable, JvAppStorage, JvAppRegistryStorage, JvFormPlacement, ExtCtrls, uCustomView, uViewBase, uViewBarraSeleccion, pngimage, uIEditorRemesasCliente, uEditorGridBase, JvComponentBase, uViewGridBase, uRemesasClienteController, JvExComCtrls, JvStatusBar, JSDialog, uDAInterfaces; type TfEditorRemesasCliente = class(TfEditorGridBase, IEditorRemesasCliente) actVolcarDisco: TAction; TBXSeparatorItem17: TTBXSeparatorItem; N4: TMenuItem; Volcaradisco1: TMenuItem; TBXSubmenuItem2: TTBXSubmenuItem; TBXItem38: TTBXItem; JsListaRemesasNoEliminadas: TJSDialog; JsPrevisualizarDialog: TJSDialog; JsImprimirDialog: TJSDialog; procedure FormShow(Sender: TObject); procedure actVolcarDiscoExecute(Sender: TObject); procedure actVolcarDiscoUpdate(Sender: TObject); procedure OnListaAnosChange(Sender: TObject; const Text: string); private FRemesasCliente: IBizRemesaCliente; FController : IRemesasClienteController; protected function GetRemesasCliente: IBizRemesaCliente; procedure SetRemesasCliente(const Value: IBizRemesaCliente); function GetController : IRemesasClienteController; virtual; procedure SetController (const Value : IRemesasClienteController); virtual; procedure NuevoInterno; override; procedure EliminarInterno; override; procedure ModificarInterno; override; procedure PrevisualizarInterno; override; procedure ImprimirInterno; override; procedure RefrescarInterno; override; //Si queremos crear otra vista para el editor heredado solo tendriamos que //sobreescribir este metodo procedure AsignarVista; virtual; public procedure PonerTitulos(const ATitulo: string = ''); override; property RemesasCliente: IBizRemesaCliente read GetRemesasCliente write SetRemesasCliente; property Controller : IRemesasClienteController read GetController write SetController; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation uses uCustomEditor, uDataModuleRemesasCliente, uDataModuleUsuarios, uGridUtils, uDBSelectionListUtils, uFactuGES_App, uEditorDBBase, uBizFamilias, uFamiliasController, // uBancaElectronicaController, cxGrid, cxGridCustomTableView; //, uListaRemesasCliente; {$R *.dfm} { ****************************** TfEditorRemesasCliente ******************************* } procedure TfEditorRemesasCliente.FormShow(Sender: TObject); begin cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED inherited; if not Assigned(ViewGrid) then raise Exception.Create('No hay ninguna vista asignada'); if not Assigned(RemesasCliente) then raise Exception.Create('No hay ningún RemesaCliente asignado'); RemesasCliente.DataTable.Active := True; ViewGrid.GotoFirst; end; function TfEditorRemesasCliente.GetRemesasCliente: IBizRemesaCliente; begin Result := FRemesasCliente; end; procedure TfEditorRemesasCliente.ImprimirInterno; var Respuesta : Integer; ARemesasCliente: IBizRemesaCliente; AllItems: Boolean; begin ARemesasCliente := Nil; AllItems := False; if MultiSelect and Assigned(ViewGrid) then AllItems := (ViewGrid.NumSeleccionados > 1); //Si esta agrupado solo podré imprimir la lista de elementos visibles if not ViewGrid.esSeleccionCeldaDatos then inherited else begin Respuesta := JsImprimirDialog.Execute; if Respuesta <> IDCANCEL then begin case JsImprimirDialog.CustomButtonResult of 200 : begin // Lista de elementos visibles inherited; end; 100 : begin // Elemento Seleccionado if AllItems then begin SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (RemesasCliente as ISeleccionable).SelectedRecords); ARemesasCliente := (Controller as IRemesasClienteController).ExtraerSeleccionados(RemesasCliente) as IBizRemesaCliente; end else ARemesasCliente := RemesasCliente; if Assigned(ARemesasCliente) then if FController.Print(ARemesasCliente, AllItems) then RefrescarInterno; end; end; end; end; end; function TfEditorRemesasCliente.GetController: IRemesasClienteController; begin Result := FController; end; procedure TfEditorRemesasCliente.ModificarInterno; begin inherited; FController.Ver(RemesasCliente); end; procedure TfEditorRemesasCliente.NuevoInterno; begin inherited; FController.Anadir(RemesasCliente); FController.Ver(RemesasCliente); end; procedure TfEditorRemesasCliente.OnListaAnosChange(Sender: TObject; const Text: string); begin Controller.FiltrarAno(RemesasCliente, DynWhereDataTable, Text); if RemesasCliente.DataTable.Active then RefrescarInterno; end; procedure TfEditorRemesasCliente.PonerTitulos(const ATitulo: string); var FTitulo : String; begin FTitulo := 'Lista de remesas de cobro - ' + AppFactuGES.EmpresaActiva.NOMBRE; inherited PonerTitulos(FTitulo); end; procedure TfEditorRemesasCliente.PrevisualizarInterno; var Respuesta : Integer; ARemesasCliente: IBizRemesaCliente; AllItems: Boolean; begin ARemesasCliente := Nil; AllItems := False; if MultiSelect and Assigned(ViewGrid) then AllItems := (ViewGrid.NumSeleccionados > 1); //Si esta agrupado solo podré imprimir la lista de elementos visibles if not ViewGrid.esSeleccionCeldaDatos then inherited else begin Respuesta := JsPrevisualizarDialog.Execute; if Respuesta <> IDCANCEL then begin case JsPrevisualizarDialog.CustomButtonResult of 200 : begin // Lista de elementos visibles inherited; end; 100 : begin // Elemento Seleccionado if AllItems then begin SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (RemesasCliente as ISeleccionable).SelectedRecords); ARemesasCliente := (Controller as IRemesasClienteController).ExtraerSeleccionados(RemesasCliente) as IBizRemesaCliente; end else ARemesasCliente := RemesasCliente; if Assigned(ARemesasCliente) then FController.Preview(ARemesasCliente, AllItems); end; end; end; end; end; procedure TfEditorRemesasCliente.RefrescarInterno; begin //Volvemos a cargar los años de las remesas if Assigned(FController) then ListaAnos := FController.DarListaAnosRemesas; inherited; end; procedure TfEditorRemesasCliente.SetRemesasCliente(const Value: IBizRemesaCliente); begin FRemesasCliente := Value; if Assigned(FRemesasCliente) then begin //Se guarda el where de la sentencia origen, por si el editor tiene filtros que //afecten a este where y en un futuro se desea volver al where origen (filtro de año)) DynWhereDataTable := FRemesasCliente.DataTable.DynamicWhere.Xml; dsDataTable.DataTable := FRemesasCliente.DataTable; if Assigned(ViewGrid) then (ViewGrid as IViewRemesasCliente).RemesasCliente := RemesasCliente; end; end; procedure TfEditorRemesasCliente.SetController(const Value: IRemesasClienteController); begin FController := Value; if Assigned(FController) then ListaAnos := FController.DarListaAnosRemesas; end; destructor TfEditorRemesasCliente.Destroy; begin FRemesasCliente := NIL; FController := NIl; inherited; end; procedure TfEditorRemesasCliente.EliminarInterno; var ARemesas: IBizRemesaCliente; AllItems: Boolean; begin ARemesas := Nil; AllItems := False; if MultiSelect and Assigned(ViewGrid) then AllItems := (ViewGrid.NumSeleccionados > 1); if AllItems then begin if (Application.MessageBox('¿Desea borrar las remesas de cobro seleccionadas?', 'Atención', MB_YESNO) = IDYES) then begin SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (RemesasCliente as ISeleccionable).SelectedRecords); ARemesas := (Controller as IRemesasClienteController).ExtraerSeleccionados(RemesasCliente) as IBizRemesaCliente; end end else begin if (Application.MessageBox('¿Desea borrar esta remesa de cobro?', 'Atención', MB_YESNO) = IDYES) then ARemesas := RemesasCliente; end; if Assigned(ARemesas) then begin FController.Eliminar(ARemesas, AllItems); if AllItems then begin if (ARemesas.DataTable.RecordCount > 0) then begin with ARemesas.DataTable do begin First; while not EOF do begin JsListaRemesasNoEliminadas.Content.Add('Ref. remesa: ' + ARemesas.REFERENCIA + ' ' + ARemesas.NOMBRE); Next; end; end; JsListaRemesasNoEliminadas.Execute; end; end; end; actRefrescar.Execute; ViewGrid.GotoFirst; end; procedure TfEditorRemesasCliente.actVolcarDiscoExecute(Sender: TObject); //var // ABancaController : IBancaElectronicaController; begin { inherited; ABancaController := TBancaElectronicaController.Create; try ABancaController.GenerarFicheroNorma19(FRemesasCliente.ID); finally ABancaController := NIL; end; } end; procedure TfEditorRemesasCliente.actVolcarDiscoUpdate(Sender: TObject); begin inherited; if HayDatos and Assigned(ViewGrid) then (Sender as TAction).Enabled := not (dsDataTable.DataTable.State in dsEditModes) and not ViewGrid.IsEmpty else (Sender as TAction).Enabled := False; end; procedure TfEditorRemesasCliente.AsignarVista; begin ViewGrid := CreateView(TfrViewRemesasCliente) as IViewRemesasCliente; end; constructor TfEditorRemesasCliente.Create(AOwner: TComponent); begin inherited; AsignarVista; end; end.