{ =============================================================================== Copyright (©) 2007. Rodax Software. =============================================================================== Los contenidos de este fichero son propiedad de Rodax Software titular del copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, en su totalidad o en parte, con el permiso escrito de Rodax Software, o de acuerdo con los términos y condiciones establecidas en el acuerdo/contrato bajo el que se suministra. ----------------------------------------------------------------------------- Web: www.rodax-software.com =============================================================================== Fecha primera versión: Versión actual: 1.0.0 Fecha versión actual: =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit uEditorRecibosProveedor; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, DB, uDADataTable, JvAppStorage, JvAppRegistryStorage, JvComponent, JvFormPlacement, ImgList, PngImageList, StdActns, ActnList, ComCtrls, TB2ExtItems, TBXExtItems, TBX, TB2Item, TB2Dock, TB2Toolbar, ExtCtrls, JvExControls, JvNavigationPane, uViewGrid, pngimage, JvComponentBase, JvExComCtrls, JvStatusBar, uViewBase, uViewBarraSeleccion, uViewGridBase, uEditorGridBase, uCustomView, uBizRecibosProveedor, uIEditorRecibosProveedor, uRecibosProveedorController, uViewRecibosProveedor, uDAInterfaces, JSDialog; type TfEditorRecibosProveedor = class(TfEditorGridBase, IEditorRecibosProveedor) frViewRecibosProveedor1: TfrViewRecibosProveedor; actInformes: TAction; TBXItem38: TTBXItem; JSInformesDialog: TJSDialog; actCambiarSituacion: TAction; TBXItem39: TTBXItem; TBXSeparatorItem17: TTBXSeparatorItem; procedure FormShow(Sender: TObject); procedure actEliminarUpdate(Sender: TObject); procedure actInformesExecute(Sender: TObject); procedure OnListaAnosChange(Sender: TObject; const Text: string); procedure actCambiarSituacionExecute(Sender: TObject); private FRecibosProveedor: IBizRecibosProveedor; FController : IRecibosProveedorController; protected function GetRecibosProveedor: IBizRecibosProveedor; procedure SetRecibosProveedor(const Value: IBizRecibosProveedor); function GetController : IRecibosProveedorController; procedure SetController (const Value : IRecibosProveedorController); procedure NuevoInterno; override; procedure EliminarInterno; override; procedure ModificarInterno; override; procedure DuplicarInterno; override; procedure ImprimirInterno; override; procedure PrevisualizarInterno; override; procedure RefrescarInterno; override; public procedure PonerTitulos(const ATitulo: string = ''); override; property RecibosProveedor: IBizRecibosProveedor read GetRecibosProveedor write SetRecibosProveedor; property Controller : IRecibosProveedorController read GetController write SetController; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation uses uDataModuleRecibosProveedor, uFactuGES_App, uDataModuleUsuarios, uGridUtils, uDBSelectionListUtils, uGestorInformesController, uEditorFechaPagoProveedor; {$R *.dfm} { *************************** TfEditorRecibosProveedor *************************** } procedure TfEditorRecibosProveedor.actCambiarSituacionExecute(Sender: TObject); var AFechaPago: String; AIgnorarContabilidad: Integer; AIdSubCuenta: Integer; ASubCuenta: String; ARecibos: IBizRecibosProveedor; AllItems: Boolean; begin inherited; ARecibos := Nil; AllItems := False; if MultiSelect and Assigned(ViewGrid) then AllItems := (ViewGrid.NumSeleccionados > 1); if AllItems then begin if (Application.MessageBox('¿Desea cambiar a pagados los recibos de proveedor seleccionados, en caso de tener recibos ya pagados en la selección, estos no serán modificados?', 'Atención', MB_YESNO) = IDYES) then begin SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (RecibosProveedor as ISeleccionable).SelectedRecords); ARecibos := (Controller as IRecibosProveedorController).ExtraerSeleccionados(RecibosProveedor) as IBizRecibosProveedor; end else exit; end else begin ARecibos := Controller.Buscar(RecibosProveedor.ID); ARecibos.DataTable.active := True; end; with TfEditorFechaPagoProveedor.Create(Nil) do begin if (ShowModal = mrOk) then begin AFechaPago := DateToStr(FechaPago); AIgnorarContabilidad := IgnorarContabilidad; AIdSubCuenta := IdSubcuenta; ASubCuenta := frViewListaSubcuentas1.cbSubCuentas.Text; Release; end else begin //Operación cancelada Release; exit; end; end; if Assigned(ARecibos) then begin ViewGrid._Grid.BeginUpdate; ViewGrid._Grid.EndUpdate; FController.AnadirPagos(ARecibos, AFechaPago, AIgnorarContabilidad, AIdSubCuenta, ASubCuenta); FController.Guardar(ARecibos); actRefrescar.Execute; ViewGrid._Grid.EndUpdate; end; end; procedure TfEditorRecibosProveedor.actEliminarUpdate(Sender: TObject); begin inherited; if (Sender as TAction).Enabled then (Sender as TAction).Enabled := (FRecibosProveedor.SITUACION = CTE_PENDIENTE) AND (FRecibosProveedor.ID_FACTURA < 1); end; procedure TfEditorRecibosProveedor.actInformesExecute(Sender: TObject); var Respuesta : Integer; AGestorInformesController : IGestorInformesController; begin AGestorInformesController := TGestorInformesController.Create; try Respuesta := JsInformesDialog.Execute; if Respuesta <> IDCANCEL then begin case JsInformesDialog.CustomButtonResult of 100 : begin // Listado de recibos pendientes AGestorInformesController.VerInformeListadoRecibosProvPendientes; end; 200 : begin // Listado de recibos de cliente AGestorInformesController.VerInformeListadoRecibosProveedor; end; end; end; finally AGestorInformesController := NIL; end; end; constructor TfEditorRecibosProveedor.Create(AOwner: TComponent); begin inherited; FController := TRecibosProveedorController.Create; ViewGrid := frViewRecibosProveedor1; // CreateView(TfrViewRecibosProveedor) as IViewRecibosProveedor; end; destructor TfEditorRecibosProveedor.Destroy; begin FRecibosProveedor := NIL; FController := NIL; inherited; end; procedure TfEditorRecibosProveedor.DuplicarInterno; begin // No se pueden duplicar recibos end; procedure TfEditorRecibosProveedor.EliminarInterno; var ARecibos: IBizRecibosProveedor; AllItems: Boolean; begin ARecibos := Nil; AllItems := False; if MultiSelect and Assigned(ViewGrid) then AllItems := (ViewGrid.NumSeleccionados > 1); if AllItems then begin if (Application.MessageBox('¿Desea borrar los recibos de proveedor seleccionados?', 'Atención', MB_YESNO) = IDYES) then begin SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (RecibosProveedor as ISeleccionable).SelectedRecords); ARecibos := (Controller as IRecibosProveedorController).ExtraerSeleccionados(RecibosProveedor) as IBizRecibosProveedor; end end else begin if (Application.MessageBox('¿Desea borrar el recibo de proveedor seleccionado?', 'Atención', MB_YESNO) = IDYES) then ARecibos := RecibosProveedor; end; if Assigned(ARecibos) then begin FController.Eliminar(ARecibos, AllItems); if AllItems then begin if (ARecibos.DataTable.RecordCount > 0) then begin with ARecibos.DataTable do begin First; while not EOF do begin // JsListaPresupuestosNoEliminados.Content.Add('Ref. Presupuesto: ' + APresupuestos.REFERENCIA + ' ' + APresupuestos.NOMBRE); Next; end; end; // JsListaRecibosNoEliminados.Execute; end; actRefrescar.Execute; end; end; ViewGrid.GotoFirst; end; procedure TfEditorRecibosProveedor.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(FRecibosProveedor) then raise Exception.Create('No hay ningún objeto asignado'); FRecibosProveedor.DataTable.Active := True; ViewGrid.GotoFirst; end; function TfEditorRecibosProveedor.GetController: IRecibosProveedorController; begin Result := FController; end; function TfEditorRecibosProveedor.GetRecibosProveedor: IBizRecibosProveedor; begin Result := FRecibosProveedor; end; procedure TfEditorRecibosProveedor.ImprimirInterno; begin inherited; end; procedure TfEditorRecibosProveedor.ModificarInterno; begin inherited; FController.Ver(FRecibosProveedor); RefrescarInterno; end; procedure TfEditorRecibosProveedor.NuevoInterno; begin //Se pueden añadir recibos nuevos sin tener factura asociada, ya que acana emite recibos independientes a las facturas //por ser particulares en lugar de empresas el cliente final. FController.Anadir(FRecibosProveedor); FController.Ver(FRecibosProveedor); end; procedure TfEditorRecibosProveedor.OnListaAnosChange(Sender: TObject; const Text: string); begin Controller.FiltrarAno(RecibosProveedor, DynWhereDataTable, Text); if RecibosProveedor.DataTable.Active then RefrescarInterno; end; procedure TfEditorRecibosProveedor.PonerTitulos(const ATitulo: string); var FTitulo : String; begin FTitulo := 'Lista de recibos de proveedor - ' + AppFactuGES.EmpresaActiva.NOMBRE; inherited PonerTitulos(FTitulo); end; procedure TfEditorRecibosProveedor.PrevisualizarInterno; begin inherited; end; procedure TfEditorRecibosProveedor.RefrescarInterno; begin //Volvemos a cargar los años de los recibos if Assigned(FController) then ListaAnos := FController.DarListaAnosRecibos; inherited; end; procedure TfEditorRecibosProveedor.SetController(const Value: IRecibosProveedorController); begin FController := Value; if Assigned(FController) then ListaAnos := FController.DarListaAnosRecibos; end; procedure TfEditorRecibosProveedor.SetRecibosProveedor(const Value: IBizRecibosProveedor); begin FRecibosProveedor := Value; if Assigned(FRecibosProveedor) 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 := FRecibosProveedor.DataTable.DynamicWhere.Xml; dsDataTable.DataTable := FRecibosProveedor.DataTable; if Assigned(ViewGrid) then (ViewGrid as IViewRecibosProveedor).Recibos := FRecibosProveedor; end; end; end.