unit uEditorExtractoMovimientos; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorBase, ToolWin, ComCtrls, JvExControls, JvComponent, JvNavigationPane, uViewDiario, uBizAsientos, 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, uEditorGridBase, JvComponentBase, uViewGridBase, uAsientosController, JvExComCtrls, JvStatusBar, uDAInterfaces, uViewEpigrafes, uBizDiario, dxGDIPlusClasses, uViewExtractoMovimientos, uIEditorExtractoMovimientos; type TfEditorExtractoMovimientos = class(TfEditorGridBase, IEditorExtractoMovimientos) frViewExtractoMovimientos1: TfrViewExtractoMovimientos; actPuntear: TAction; TBXItem38: TTBXItem; actCerrarCaja: TAction; TBXItem39: TTBXItem; TBXSeparatorItem17: TTBXSeparatorItem; actSetBancoDePago: TAction; TBXItem40: TTBXItem; TBXSeparatorItem18: TTBXSeparatorItem; procedure FormShow(Sender: TObject); procedure actModificarUpdate(Sender: TObject); procedure actEliminarUpdate(Sender: TObject); procedure actPuntearExecute(Sender: TObject); procedure actPuntearUpdate(Sender: TObject); procedure actNuevoUpdate(Sender: TObject); procedure actCerrarCajaExecute(Sender: TObject); procedure actSetBancoDePagoExecute(Sender: TObject); private FDiario: IBizDiario; FController : IAsientosController; protected function GetDiario: IBizDiario; procedure SetDiario(const Value: IBizDiario); procedure OnExtractoChanged(Sender: TObject); function GetController : IAsientosController; virtual; procedure SetController (const Value : IAsientosController); virtual; procedure NuevoInterno; override; procedure EliminarInterno; override; procedure ModificarInterno; override; procedure PrevisualizarInterno; override; procedure ImprimirInterno; override; public procedure PonerTitulos(const ATitulo: string = ''); override; property Diario: IBizDiario read GetDiario write SetDiario; property Controller : IAsientosController read GetController write SetController; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation uses uFactuGES_App, uBizEjercicios, uBizApuntes, uSubCuentasController; {$R *.dfm} { ****************************** TfEditorAsientos ******************************* } procedure TfEditorExtractoMovimientos.FormShow(Sender: TObject); begin inherited; if not Assigned(ViewGrid) then raise Exception.Create('No hay ninguna vista asignada'); if not Assigned(Diario) then raise Exception.Create('No hay ningún Diario asignado'); if (AppFactuGES.UsuarioActivo.ID_PERFIL = CTE_PERFIL_ADMINISTRADOR) or (AppFactuGES.UsuarioActivo.ID_PERFIL = CTE_PERFIL_GERENCIA) then begin actSetBancoDePago.Enabled := True; actSetBancoDePago.Visible := True; end else begin actSetBancoDePago.Enabled := False; actSetBancoDePago.Visible := False; end; //Para que coja el ancho automático actAnchoAuto.Execute; end; function TfEditorExtractoMovimientos.GetDiario: IBizDiario; begin Result := FDiario; end; procedure TfEditorExtractoMovimientos.ImprimirInterno; begin inherited; end; function TfEditorExtractoMovimientos.GetController: IAsientosController; begin Result := FController; end; procedure TfEditorExtractoMovimientos.ModificarInterno; begin inherited; FController.Ver(FController.Buscar(Diario.ID_ASIENTO)); actRefrescar.Execute; end; procedure TfEditorExtractoMovimientos.NuevoInterno; begin inherited; FController.Ver(FController.Anadir(frViewExtractoMovimientos1.cxGrid.ActiveLevel.Tag)); actRefrescar.Execute; end; procedure TfEditorExtractoMovimientos.OnExtractoChanged(Sender: TObject); begin Diario := frViewExtractoMovimientos1.Diario; end; procedure TfEditorExtractoMovimientos.PonerTitulos(const ATitulo: string); var FTitulo : String; begin FTitulo := 'Cajas / Bancos - ' + AppFactuGES.EmpresaActiva.NOMBRE + ' - ' + AppFactuGES.EjercicioActivo.NOMBRE + ' (' + AppFactuGES.EjercicioActivo.ESTADO + ')'; inherited PonerTitulos(FTitulo); end; procedure TfEditorExtractoMovimientos.PrevisualizarInterno; begin inherited; end; procedure TfEditorExtractoMovimientos.SetDiario(const Value: IBizDiario); begin FDiario := Value; if Assigned(FDiario) then dsDataTable.DataTable := FDiario.DataTable; end; procedure TfEditorExtractoMovimientos.SetController(const Value: IAsientosController); begin FController := Value; if Assigned(FController) and Assigned(ViewGrid) then (ViewGrid as IViewExtractoMovimientos).Controller := FController; end; destructor TfEditorExtractoMovimientos.Destroy; begin frViewExtractoMovimientos1.OnExtractoChange := Nil; FDiario := Nil; inherited; end; procedure TfEditorExtractoMovimientos.EliminarInterno; begin if (Application.MessageBox('¿Está seguro que desea borrar el asiento seleccionado?', 'Atención', MB_YESNO) = IDYES) then begin inherited; if FController.Eliminar(Diario.ID_ASIENTO) then actRefrescar.Execute; end; end; procedure TfEditorExtractoMovimientos.actPuntearExecute(Sender: TObject); begin inherited; FController.Puntear(Diario); end; procedure TfEditorExtractoMovimientos.actPuntearUpdate(Sender: TObject); begin if HayDatos and Assigned(ViewGrid) then (Sender as TAction).Enabled := not (dsDataTable.DataTable.State in dsEditModes) and not ViewGrid.IsEmpty and ViewGrid.esSeleccionCeldaDatos else (Sender as TAction).Enabled := False; if (Sender as TAction).Enabled then (Sender as TAction).Enabled := (AppFactuGES.EjercicioActivo.ESTADO = CTE_ABIERTO); end; procedure TfEditorExtractoMovimientos.actSetBancoDePagoExecute(Sender: TObject); begin inherited; if (frViewExtractoMovimientos1.SubCuentas.Locate('ID', frViewExtractoMovimientos1.cxGrid.ActiveLevel.Tag,[])) then begin if (frViewExtractoMovimientos1.SubCuentas.REF_CUENTA = inttostr(CTE_CUENTASCAJA)) then showmessage('No es posible poner una caja como cuenta de pago para transferencias por defecto') else begin FController.SetBancoPorDefecto(frViewExtractoMovimientos1.SubCuentas.ID_EJERCICIO, frViewExtractoMovimientos1.SubCuentas.ID); frViewExtractoMovimientos1.RefrescarSubcuentas(frViewExtractoMovimientos1.SubCuentas.ID); end; end; end; procedure TfEditorExtractoMovimientos.actCerrarCajaExecute(Sender: TObject); begin inherited; if FController.CerrarCajaBanco(frViewExtractoMovimientos1.cxGrid.ActiveLevel.Tag) then actRefrescar.Execute; ViewGrid.GotoFirst; end; procedure TfEditorExtractoMovimientos.actEliminarUpdate(Sender: TObject); begin inherited; //No se podrá eliminar un asiento si es automático por factura, si el ejercicio esta cerrado o el asiento esta punteado if (Sender as TAction).Enabled then if Assigned(Diario) then (Sender as TAction).Enabled := (ViewGrid._FocusedView.Controller.SelectedRowCount = 1) and Diario.ID_FACTURAIsNull and Diario.ID_PAGOIsNull and (Diario.ESTADO = CTE_ABIERTO) and (Diario.PUNTEADO = CTE_NO_PUNTEADO); end; procedure TfEditorExtractoMovimientos.actModificarUpdate(Sender: TObject); begin inherited; //No se podrá modificar un asiento si es automático por factura, si el ejercicio esta cerrado o el asiento esta punteado if (Sender as TAction).Enabled then if Assigned(Diario) then (Sender as TAction).Enabled := (ViewGrid._FocusedView.Controller.SelectedRowCount = 1) and Diario.ID_FACTURAIsNull and Diario.ID_PAGOIsNull and (Diario.ESTADO = CTE_ABIERTO) and (Diario.PUNTEADO = CTE_NO_PUNTEADO); end; procedure TfEditorExtractoMovimientos.actNuevoUpdate(Sender: TObject); begin inherited; if (Sender as TAction).Enabled then if Assigned(Diario) then (Sender as TAction).Enabled := AppFactuGES.EjercicioActivo.ESTADO = CTE_ABIERTO; end; constructor TfEditorExtractoMovimientos.Create(AOwner: TComponent); begin inherited; ViewGrid := frViewExtractoMovimientos1; //Se establece este evento porque el control sobre el objeto de negocio recae en las vista ya que cambia //en función de la pestaña en la que se encuentre frViewExtractoMovimientos1.OnExtractoChange := OnExtractoChanged; end; end.