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, cxCustomData, uViewRemesasCliente, uIEditorRemesaCliente, uRemesasClienteController, JvExComCtrls, JvStatusBar, dxLayoutLookAndFeels, uViewGridBase, uViewGrid, uViewRecibosRemesaCliente, uViewTotales, uViewDetallesGenerico, uDAInterfaces, cxControls, cxContainer, cxEdit, cxLabel; type TfEditorRemesaCliente = class(TfEditorDBItem, IEditorRemesaCliente) dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; frViewRemesaCliente1: TfrViewRemesaCliente; frViewTotales1: TfrViewTotales; frViewRecibosRemesaCliente1: TfrViewRecibosRemesaCliente; actVolcarDisco: TAction; TBXSubmenuItem2: TTBXSubmenuItem; TBXItem7: TTBXItem; TBXSeparatorItem6: TTBXSeparatorItem; actNorma19: TAction; actNorma32: TAction; TBXSubmenuItem3: TTBXSubmenuItem; TBXItem33: TTBXItem; TBXItem34: TTBXItem; procedure FormShow(Sender: TObject); procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction); procedure actAnadirRecibosExecute(Sender: TObject); procedure actEliminarReciboExecute(Sender: TObject); procedure JvFormStorageRestorePlacement(Sender: TObject); procedure JvFormStorageSavePlacement(Sender: TObject); procedure frViewRecibosRemesaCliente1cxGridViewDataControllerSummaryAfterSummary( ASender: TcxDataSummary); procedure actVolcarDiscoUpdate(Sender: TObject); procedure actNorma19Execute(Sender: TObject); procedure actNorma32Execute(Sender: TObject); procedure actNorma19Update(Sender: TObject); procedure actNorma32Update(Sender: TObject); private procedure OnRecibosChanged(Sender: TObject); 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 PrevisualizarInterno; override; procedure ImprimirInterno; override; procedure CerrarInterno; override; procedure PonerTitulos(const ATitulo: string = ''); override; function GetModified: Boolean; override; function PuedoImprimir: Boolean; override; public property RemesaCliente: IBizRemesaCliente read GetRemesaCliente write SetRemesaCliente; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation {$R *.dfm} uses uDataTableUtils, uDataModuleUsuarios, uDialogUtils, uCustomEditor, uDataModuleRemesasCliente, uDataModuleBase, uBizFamilias, uFamiliasController, uFactuGES_App, uBancaElectronicaController; { ******************************* 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 := frViewRecibosRemesaCliente1.Modified; Result := bCambiado; end; function TfEditorRemesaCliente.GetViewRemesaCliente: IViewRemesaCliente; begin Result := FViewRemesaCliente; end; procedure TfEditorRemesaCliente.GuardarInterno; var bEsNuevo : Boolean; AIgnorarContabilidad: Integer; ASubCuenta: Integer; begin inherited; bEsNuevo := False; ShowHourglassCursor; frViewRecibosRemesaCliente1.OnViewModified := Nil; //frViewDetallesFacturaCliente1.SaveGridStatus; // Para guardar estado del grid // frViewDetallesFacturaCliente1.BeginUpdate; // Para que no se mueva el foco try bEsNuevo := FRemesaCliente.EsNuevo; // {$IFDEF CONTABILIDAD} AIgnorarContabilidad := frViewRemesaCliente1.frViewListaSubCuentas1.eContabilizar.EditValue; ASubCuenta := frViewRemesaCliente1.frViewListaSubCuentas1.IdSubCuenta; FController.Guardar(FRemesaCliente, AIgnorarContabilidad, ASubCuenta); // {$ELSE} // FController.Guardar(FRemesaProveedor); // {$ENDIF} // FController.Guardar(FRemesaCliente); 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; frViewRecibosRemesaCliente1.Modified := False; frViewRecibosRemesaCliente1.OnViewModified := OnRecibosChanged; end; procedure TfEditorRemesaCliente.ImprimirInterno; begin inherited; FController.Print(FRemesaCliente); 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.OnRecibosChanged(Sender: TObject); begin ActualizarEstadoEditor; end; procedure TfEditorRemesaCliente.PonerTitulos(const ATitulo: string); var FTitulo : String; begin FTitulo := ATitulo; if (FTitulo = '') and Assigned(RemesaCliente) then begin if RemesaCliente.EsNuevo then FTitulo := 'Nueva remesa de cobro' else FTitulo := 'Remesa de cobro'; end; inherited PonerTitulos(FTitulo); Self.Caption := FTitulo + ' (' + AppFactuGES.EmpresaActiva.NOMBRE + ')'; end; procedure TfEditorRemesaCliente.PrevisualizarInterno; begin inherited; FController.Preview(FRemesaCliente); end; function TfEditorRemesaCliente.PuedoImprimir: Boolean; begin Result := inherited PuedoImprimir and (not RemesaCliente.Recibos.IDIsNull); end; procedure TfEditorRemesaCliente.SetRemesaCliente(const Value: IBizRemesaCliente); begin FRemesaCliente := Value; if Assigned(FRemesaCliente) then begin dsDataTable.DataTable := FRemesaCliente.DataTable; frViewRecibosRemesaCliente1.RemesaCliente := FRemesaCliente; frViewRecibosRemesaCliente1.OnViewModified := OnRecibosChanged; end else begin dsDataTable.DataTable := Nil; frViewRecibosRemesaCliente1.RemesaCliente := Nil; frViewRecibosRemesaCliente1.OnViewModified := Nil; end; if Assigned(FViewRemesaCliente) then FViewRemesaCliente.RemesaCliente := FRemesaCliente; frViewTotales1.DADataSource.DataTable := dsDataTable.DataTable; end; procedure TfEditorRemesaCliente.SetController(const Value: IRemesasClienteController); begin FController := Value; if Assigned(FController) then begin (ViewRemesaCliente as IViewRemesaCliente).Controller := (FController as IRemesasClienteController); frViewRecibosRemesaCliente1.Controller := (FController as IRemesasClienteController); end; end; procedure TfEditorRemesaCliente.SetViewRemesaCliente(const Value: IViewRemesaCliente); begin FViewRemesaCliente := Value; if Assigned(FViewRemesaCliente) and Assigned(RemesaCliente) then begin FViewRemesaCliente.RemesaCliente := RemesaCliente; FViewRemesaCliente.Controller := (FController as IRemesasClienteController); end; end; procedure TfEditorRemesaCliente.FormShow(Sender: TObject); begin inherited; 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; //Falla si lo hacemos por dfm frViewRecibosRemesaCliente1.cxGridView.OptionsSelection.MultiSelect := False; end; procedure TfEditorRemesaCliente.frViewRecibosRemesaCliente1cxGridViewDataControllerSummaryAfterSummary(ASender: TcxDataSummary); Var AImporteTotal: Currency; begin inherited; if VarIsNull(ASender.FooterSummaryValues[0]) then AImporteTotal := 0 else AImporteTotal := ASender.FooterSummaryValues[0]; if Assigned(RemesaCliente) then begin if (RemesaCliente.IMPORTE_TOTAL <> AImporteTotal) then begin if not RemesaCliente.DataTable.Editing then begin RemesaCliente.Edit; RemesaCliente.IMPORTE_TOTAL := AImporteTotal; RemesaCliente.Post; end; end; end; 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.actNorma19Execute(Sender: TObject); var ABancaController : IBancaElectronicaController; begin inherited; ABancaController := TBancaElectronicaController.Create; try ABancaController.GenerarFicheroNorma19(FRemesaCliente.ID); finally ABancaController := NIL; end; end; procedure TfEditorRemesaCliente.actNorma19Update(Sender: TObject); begin (Sender as TAction).Enabled := HayDatos and (not FRemesaCliente.EsNuevo); end; procedure TfEditorRemesaCliente.actNorma32Execute(Sender: TObject); var ABancaController : IBancaElectronicaController; begin inherited; ABancaController := TBancaElectronicaController.Create; try ABancaController.GenerarFicheroNorma32(FRemesaCliente.ID); finally ABancaController := NIL; end; end; procedure TfEditorRemesaCliente.actNorma32Update(Sender: TObject); begin (Sender as TAction).Enabled := HayDatos and (not FRemesaCliente.EsNuevo); end; procedure TfEditorRemesaCliente.actVolcarDiscoUpdate(Sender: TObject); begin (Sender as TAction).Enabled := HayDatos and (not FRemesaCliente.EsNuevo); end; procedure TfEditorRemesaCliente.CerrarInterno; begin frViewRecibosRemesaCliente1.OnViewModified := Nil; inherited; 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.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.