unit uEditorFacturasProveedor; 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, uEditorGridBase, uBizFacturasProveedor, uIEditorFacturasProveedor, uFacturasProveedorController, uCustomView, uViewBase, uViewBarraSeleccion, uViewGridBase, JvExComCtrls, JvStatusBar, JSDialog, uViewFacturasProveedor, uDAInterfaces; type TfEditorFacturasProveedor = class(TfEditorGridBase, IEditorFacturasProveedor) Cambiarlasituacin1: TMenuItem; N4: TMenuItem; JsNuevaFacturaDialog: TJSDialog; JsListaFacturasGeneradas: TJSDialog; frViewFacturasProveedor1: TfrViewFacturasProveedor; actNuevaFactura: TAction; actNuevoAbono: TAction; JsNuevoAbonoDialog: TJSDialog; TBXSubmenuItem2: TTBXSubmenuItem; TBXItem38: TTBXItem; TBXItem39: TTBXItem; JsPrevisualizarDialog: TJSDialog; JsImprimirDialog: TJSDialog; JsListaFacturasNoEliminadas: TJSDialog; JSInformesDialog: TJSDialog; actInformes: TAction; TBXItem40: TTBXItem; actDomiciliacion: TAction; TBXItem41: TTBXItem; TBXSeparatorItem17: TTBXSeparatorItem; JsListaFacturasNoModificables: TJSDialog; procedure FormShow(Sender: TObject); procedure actEliminarUpdate(Sender: TObject); procedure actNuevaFacturaExecute(Sender: TObject); procedure actNuevoAbonoExecute(Sender: TObject); procedure actInformesExecute(Sender: TObject); procedure OnListaAnosChange(Sender: TObject; const Text: string); procedure actDomiciliacionExecute(Sender: TObject); procedure actDomiciliacionUpdate(Sender: TObject); private FFacturas: IBizFacturaProveedor; FController : IFacturasProveedorController; protected function GetFacturas: IBizFacturaProveedor; procedure SetFacturas(const Value: IBizFacturaProveedor); function GetController : IFacturasProveedorController; virtual; procedure SetController (const Value : IFacturasProveedorController); virtual; procedure NuevoInterno; override; procedure EliminarInterno; override; procedure ModificarInterno; override; procedure DuplicarInterno; override; procedure RefrescarInterno; override; public procedure PonerTitulos(const ATitulo: string = ''); override; property Facturas: IBizFacturaProveedor read GetFacturas write SetFacturas; property Controller : IFacturasProveedorController read GetController write SetController; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation uses uDataModuleFacturasProveedor, uDataModuleUsuarios, cxControls, uGridStatusUtils, uDBSelectionListUtils, uFactuGES_App, uAlbaranesProveedorController, uBizAlbaranesProveedor, uEditorBase, uGenerarFacturasProvAlbProvUtils, uGenerarFacturasProvPedUtils, uGestorInformesController; {$R *.dfm} { *************************** TfEditorFacturasProveedor *************************** } procedure TfEditorFacturasProveedor.actDomiciliacionExecute(Sender: TObject); var AFacturas: IBizFacturaProveedor; AListaFacturasNoModificadas: TStringList; i: integer; begin inherited; ViewGrid.SaveGridStatus; try SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Facturas as ISeleccionable).SelectedRecords); AFacturas := (Controller as IFacturasProveedorController).ExtraerSeleccionados(Facturas) as IBizFacturaProveedor; finally ViewGrid.RestoreGridStatus; end; AListaFacturasNoModificadas := Controller.AsignarCuentaBancaria(AFacturas); JsListaFacturasNoModificables.Content.Clear; for i := 0 to AListaFacturasNoModificadas.Count - 1 do JsListaFacturasNoModificables.Content.Add('Ref. factura: ' + AListaFacturasNoModificadas.Names[i] + ' ' + AListaFacturasNoModificadas.Values[AListaFacturasNoModificadas.Names[i]]); if AListaFacturasNoModificadas.Count > 0 then JsListaFacturasNoModificables.Execute; FreeAndNil(AListaFacturasNoModificadas); RefrescarInterno; end; procedure TfEditorFacturasProveedor.actDomiciliacionUpdate(Sender: TObject); begin inherited; if HayDatos and Assigned(ViewGrid) then (Sender as TAction).Enabled := not (dsDataTable.DataTable.State in dsEditModes) and ViewGrid.esSeleccionCeldaDatos and (ViewGrid.NumSeleccionados > 0) else (Sender as TAction).Enabled := False; if (Sender as TAction).Enabled then (Sender as TAction).Enabled := (FFacturas.SITUACION = CTE_PENDIENTE); end; procedure TfEditorFacturasProveedor.actEliminarUpdate(Sender: TObject); begin inherited; if (Sender as TAction).Enabled then (Sender as TAction).Enabled := (FFacturas.SITUACION = CTE_PENDIENTE); end; procedure TfEditorFacturasProveedor.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 facturas pendientes AGestorInformesController.VerInformeListadoFacturasProvPendientes; end; 200 : begin // Listado de IVA AGestorInformesController.VerInformeIVAProveedores; end; 300 : begin // Listado de facturas de cliente AGestorInformesController.VerInformeListadoFacturasProv; end; end; end; finally AGestorInformesController := NIL; end; end; procedure TfEditorFacturasProveedor.actNuevaFacturaExecute(Sender: TObject); begin actNuevo.Execute; end; procedure TfEditorFacturasProveedor.actNuevoAbonoExecute(Sender: TObject); var Respuesta : Integer; Opcion : Integer; begin inherited; //ABONOS if (Facturas.TIPO = CTE_TIPO_FACTURA) then begin Respuesta := JsNuevoAbonoDialog.Execute; //Nos salimos sin hace nada if Respuesta = IDCANCEL then Exit; Opcion := JsNuevoAbonoDialog.CustomButtonResult; end else Opcion := 100; case Opcion of 200 : begin // Utilizar factura seleccionada FController.Ver(FController.GenerarAbono(Facturas)); actRefrescar.Execute; ViewGrid._FocusedView.DataController.GotoFirst; end; 100 : begin // Abono nuevo vacio if FController.AnadirAbono(Facturas) then FController.Ver(Facturas); end; end; end; constructor TfEditorFacturasProveedor.Create(AOwner: TComponent); begin inherited; FHeaderText := 'Lista de facturas de proveedor'; FWindowCaption := FHeaderText; ViewGrid := frViewFacturasProveedor1; // CreateView(TfrViewFacturasProveedor) as IViewFacturasProveedor; end; destructor TfEditorFacturasProveedor.Destroy; begin FFacturas := NIL; inherited; end; procedure TfEditorFacturasProveedor.DuplicarInterno; var AFactura : IBizFacturaProveedor; begin inherited; AFactura := FController.Duplicar(FFacturas); try FController.Ver(AFactura); finally actRefrescar.Execute; end; end; procedure TfEditorFacturasProveedor.EliminarInterno; var ACadena : String; AFacturas: IBizFacturaProveedor; AllItems: Boolean; begin AFacturas := Nil; AllItems := False; if MultiSelect and Assigned(ViewGrid) then AllItems := (ViewGrid.NumSeleccionados > 1); if AllItems then begin if (Application.MessageBox('¿Desea borrar las facturas/abonos de proveedor seleccionados?', 'Atención', MB_YESNO) = IDYES) then begin SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Facturas as ISeleccionable).SelectedRecords); AFacturas := (Controller as IFacturasProveedorController).ExtraerSeleccionados(Facturas) as IBizFacturaProveedor; end end else begin if Facturas.TIPO = CTE_TIPO_FACTURA then ACadena := '¿Desea borrar esta factura de proveedor?' else ACadena := '¿Desea borrar este abono a proveedor?'; if (Application.MessageBox(PChar(ACadena), 'Atención', MB_YESNO) = IDYES) then AFacturas := Facturas; end; if Assigned(AFacturas) then begin if (not FController.Eliminar(AFacturas, AllItems)) and (not AllItems) then //Es el caso de querer borrar una factura pendiente cuyos recibos tienen devoluciones begin JsListaFacturasNoEliminadas.Content.Clear; JsListaFacturasNoEliminadas.Content.Add('Ref. factura: ' + AFacturas.REFERENCIA + ' ' + AFacturas.NOMBRE); JsListaFacturasNoEliminadas.Execute; end; if AllItems then begin if (AFacturas.DataTable.RecordCount > 0) then begin with AFacturas.DataTable do begin JsListaFacturasNoEliminadas.Content.Clear; First; while not EOF do begin JsListaFacturasNoEliminadas.Content.Add('Ref. factura: ' + AFacturas.REFERENCIA + ' ' + AFacturas.NOMBRE); Next; end; end; JsListaFacturasNoEliminadas.Execute; end; actRefrescar.Execute; end; end; ViewGrid.GotoFirst; end; procedure TfEditorFacturasProveedor.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(Facturas) then raise Exception.Create('No hay ninguna facturas asignada'); Facturas.DataTable.Active := True; ViewGrid.GotoFirst; end; function TfEditorFacturasProveedor.GetController: IFacturasProveedorController; begin Result := FController; end; function TfEditorFacturasProveedor.GetFacturas: IBizFacturaProveedor; begin Result := FFacturas; end; procedure TfEditorFacturasProveedor.ModificarInterno; begin inherited; FController.Ver(Facturas); end; procedure TfEditorFacturasProveedor.NuevoInterno; var Respuesta : Integer; begin inherited; Respuesta := JsNuevaFacturaDialog.Execute; if Respuesta <> IDCANCEL then begin case JsNuevaFacturaDialog.CustomButtonResult of 100 : begin // Factura nuevo vacio if FController.Anadir(Facturas) then FController.Ver(Facturas); end; 200 : begin // Utilizar pedidos GenerarFacturaProvPed; actRefrescar.Execute; end; 300 : begin // Utilizar albaranes GenerarFacturaProvAlbProv; actRefrescar.Execute; end; end; end; end; procedure TfEditorFacturasProveedor.OnListaAnosChange(Sender: TObject; const Text: string); begin Controller.FiltrarAno(Facturas, DynWhereDataTable, Text); if Facturas.DataTable.Active then RefrescarInterno; end; procedure TfEditorFacturasProveedor.PonerTitulos(const ATitulo: string); var FTitulo : String; begin FTitulo := FWindowCaption + ' - ' + AppFactuGES.EmpresaActiva.NOMBRE; inherited PonerTitulos(FTitulo); end; procedure TfEditorFacturasProveedor.RefrescarInterno; begin //Volvemos a cargar los años de los albaranes if Assigned(FController) then ListaAnos := FController.DarListaAnosFacturas; inherited; end; procedure TfEditorFacturasProveedor.SetController(const Value: IFacturasProveedorController); begin FController := Value; if Assigned(FController) then ListaAnos := FController.DarListaAnosFacturas; end; procedure TfEditorFacturasProveedor.SetFacturas(const Value: IBizFacturaProveedor); begin FFacturas := Value; if Assigned(FFacturas) 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 := FFacturas.DataTable.DynamicWhere.Xml; dsDataTable.DataTable := FFacturas.DataTable; if Assigned(ViewGrid) then (ViewGrid as IViewFacturasProveedor).Facturas := Facturas; end; end; end.