unit uEditorAlbaranesProveedor; 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, uBizAlbaranesProveedor, uIEditorAlbaranesProveedor, uAlbaranesProveedorController, uCustomView, uViewBase, uViewBarraSeleccion, uViewGridBase, uViewAlbaranesProveedor, JvExComCtrls, JvStatusBar, JSDialog, uDAInterfaces; type TfEditorAlbaranesProveedor = class(TfEditorGridBase, IEditorAlbaranesProveedor) actGenerarFactura: TAction; JsNuevoAlbaranDialog: TJSDialog; JsPrevisualizarDialog: TJSDialog; JsImprimirDialog: TJSDialog; TBXItem39: TTBXItem; JsListaAlbaranesNoEliminados: TJSDialog; actGenerarDevolucion: TAction; N5: TMenuItem; Generardevolucin1: TMenuItem; Generarfactura1: TMenuItem; TBXSubmenuItem2: TTBXSubmenuItem; TBXItem38: TTBXItem; TBXItem40: TTBXItem; TBXItem41: TTBXItem; procedure FormShow(Sender: TObject); procedure actGenerarFacturaExecute(Sender: TObject); procedure actGenerarFacturaUpdate(Sender: TObject); procedure actEliminarUpdate(Sender: TObject); procedure OnListaAnosChange(Sender: TObject; const Text: string); procedure actGenerarDevolucionUpdate(Sender: TObject); procedure actGenerarDevolucionExecute(Sender: TObject); protected FAlbaranes: IBizAlbaranProveedor; FController : IAlbaranesProveedorController; function GetAlbaranes: IBizAlbaranProveedor; procedure SetAlbaranes(const Value: IBizAlbaranProveedor); function GetController : IAlbaranesProveedorController; virtual; procedure SetController (const Value : IAlbaranesProveedorController); virtual; procedure NuevoInterno; override; procedure ModificarInterno; override; procedure EliminarInterno; override; procedure DuplicarInterno; 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 Albaranes: IBizAlbaranProveedor read GetAlbaranes write SetAlbaranes; property Controller : IAlbaranesProveedorController read GetController write SetController; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation uses uDataModuleAlbaranesProveedor, uDataModuleUsuarios, uFactuGES_App, uGenerarFacturasProvAlbProvUtils, uGenerarAlbaranesProvUtils, uDialogOpcionesImpresionAlbaranesProveedor, uEditorBase, schAlbaranesProveedorClient_Intf, uGridStatusUtils, uDBSelectionListUtils; {$R *.dfm} { *************************** TfEditorAlbaranesProveedor *************************** } procedure TfEditorAlbaranesProveedor.actEliminarUpdate(Sender: TObject); begin inherited; if (Sender as TAction).Enabled then (Sender as TAction).Enabled := not (FAlbaranes.ID_FACTURA > 0) end; procedure TfEditorAlbaranesProveedor.actGenerarDevolucionExecute( Sender: TObject); var ADevolucion : IBizAlbaranProveedor; begin inherited; ADevolucion := FController.GenerarDevolucion(FAlbaranes); if Assigned(ADevolucion) then FController.Ver(ADevolucion); end; procedure TfEditorAlbaranesProveedor.actGenerarDevolucionUpdate( Sender: TObject); begin (Sender as TAction).Enabled := HayDatos and not (ViewGrid.NumSeleccionados > 1) and (Albaranes.REF_FACTURA = '') and ViewGrid.esSeleccionCeldaDatos; end; procedure TfEditorAlbaranesProveedor.actGenerarFacturaExecute(Sender: TObject); begin inherited; GenerarFacturaProvAlbProv(Albaranes.ID); actRefrescar.Execute; end; procedure TfEditorAlbaranesProveedor.actGenerarFacturaUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := HayDatos and not (ViewGrid.NumSeleccionados > 1) and (Albaranes.REF_FACTURA = '') and ViewGrid.esSeleccionCeldaDatos; end; procedure TfEditorAlbaranesProveedor.AsignarVista; begin ViewGrid := CreateView(TfrViewAlbaranesProveedor) as IViewAlbaranesProveedor; end; constructor TfEditorAlbaranesProveedor.Create(AOwner: TComponent); begin inherited; FHeaderText := 'Lista de albaranes de proveedor'; FWindowCaption := FHeaderText; AsignarVista; end; destructor TfEditorAlbaranesProveedor.Destroy; begin FAlbaranes := NIL; FController := NIL; inherited; end; procedure TfEditorAlbaranesProveedor.DuplicarInterno; var AAlbaran : IBizAlbaranProveedor; begin inherited; AAlbaran := FController.Duplicar(Albaranes); try FController.Ver(AAlbaran); finally actRefrescar.Execute; end; end; procedure TfEditorAlbaranesProveedor.EliminarInterno; var AAlbaranes: IBizAlbaranProveedor; AllItems: Boolean; begin AAlbaranes := Nil; AllItems := False; if MultiSelect and Assigned(ViewGrid) then AllItems := (ViewGrid.NumSeleccionados > 1); if AllItems then begin if (Application.MessageBox('¿Desea borrar los albaranes de proveedor seleccionados?', 'Atención', MB_YESNO) = IDYES) then begin SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Albaranes as ISeleccionable).SelectedRecords); AAlbaranes := (Controller as IAlbaranesProveedorController).ExtraerSeleccionados(Albaranes) as IBizAlbaranProveedor; end end else begin if (Application.MessageBox('¿Desea borrar el albarán de proveedor seleccionado?', 'Atención', MB_YESNO) = IDYES) then AAlbaranes := Albaranes; end; if Assigned(AAlbaranes) then begin FController.Eliminar(AAlbaranes, AllItems); if AllItems then begin if (AAlbaranes.DataTable.RecordCount > 0) then begin with AAlbaranes.DataTable do begin First; while not EOF do begin JsListaAlbaranesNoEliminados.Content.Add('Ref. albarán: ' + AAlbaranes.REFERENCIA + ' ' + AAlbaranes.NOMBRE); Next; end; end; JsListaAlbaranesNoEliminados.Execute; end; actRefrescar.Execute; end; end; ViewGrid.GotoFirst; end; procedure TfEditorAlbaranesProveedor.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(Albaranes) then raise Exception.Create('No hay ningún albarán asignado'); Albaranes.DataTable.Active := True; ViewGrid.GotoFirst; end; function TfEditorAlbaranesProveedor.GetController: IAlbaranesProveedorController; begin Result := FController; end; procedure TfEditorAlbaranesProveedor.ImprimirInterno; var Respuesta : Integer; AAlbaranes: IBizAlbaranProveedor; AllItems: Boolean; begin AAlbaranes := 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, (Albaranes as ISeleccionable).SelectedRecords); AAlbaranes := (Controller as IAlbaranesProveedorController).ExtraerSeleccionados(Albaranes) as IBizAlbaranProveedor; end else AAlbaranes := Albaranes; if Assigned(AAlbaranes) then FController.Print(AAlbaranes, AllItems); end; end; end; end; end; function TfEditorAlbaranesProveedor.GetAlbaranes: IBizAlbaranProveedor; begin Result := FAlbaranes; end; procedure TfEditorAlbaranesProveedor.ModificarInterno; begin inherited; FController.Ver(Albaranes); end; procedure TfEditorAlbaranesProveedor.NuevoInterno; var Respuesta : Integer; begin inherited; Respuesta := JsNuevoAlbaranDialog.Execute; if Respuesta <> IDCANCEL then begin case JsNuevoAlbaranDialog.CustomButtonResult of 200 : begin // Utilizar un pedido GenerarAlbaranProv; actRefrescar.Execute; end; 100 : begin // Albaran nuevo vacio if FController.Anadir(Albaranes) then FController.Ver(Albaranes); end; end; end; end; procedure TfEditorAlbaranesProveedor.OnListaAnosChange(Sender: TObject; const Text: string); begin Controller.FiltrarAno(Albaranes, DynWhereDataTable, Text); if Albaranes.DataTable.Active then RefrescarInterno; end; procedure TfEditorAlbaranesProveedor.PonerTitulos(const ATitulo: string); var FTitulo : String; begin FTitulo := FWindowCaption + ' - ' + AppFactuGES.EmpresaActiva.NOMBRE; inherited PonerTitulos(FTitulo); end; procedure TfEditorAlbaranesProveedor.PrevisualizarInterno; var Respuesta : Integer; AAlbaranes: IBizAlbaranProveedor; AllItems: Boolean; FImprimirPrecios : Boolean; FImprimirRefProveedor : Boolean; begin AAlbaranes := Nil; AllItems := False; FImprimirPrecios := True; FImprimirRefProveedor := True; 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, (Albaranes as ISeleccionable).SelectedRecords); AAlbaranes := (Controller as IAlbaranesProveedorController).ExtraerSeleccionados(Albaranes) as IBizAlbaranProveedor; end else AAlbaranes := Albaranes; if Assigned(AAlbaranes) then begin if ElegirOpcionesImpresionAlbaranProveedor(FImprimirPrecios, FImprimirRefProveedor) then FController.Preview(AAlbaranes, AllItems, FImprimirPrecios, FImprimirRefProveedor); end; end; end; end; end; end; procedure TfEditorAlbaranesProveedor.RefrescarInterno; begin //Volvemos a cargar los años de los albaranes if Assigned(FController) then ListaAnos := FController.DarListaAnosAlbaranes; inherited; end; procedure TfEditorAlbaranesProveedor.SetController(const Value: IAlbaranesProveedorController); begin FController := Value; if Assigned(FController) then ListaAnos := FController.DarListaAnosAlbaranes; end; procedure TfEditorAlbaranesProveedor.SetAlbaranes(const Value: IBizAlbaranProveedor); begin FAlbaranes := Value; if Assigned(FAlbaranes) 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 := FAlbaranes.DataTable.DynamicWhere.Xml; dsDataTable.DataTable := FAlbaranes.DataTable; if Assigned(ViewGrid) then (ViewGrid as IViewAlbaranesProveedor).Albaranes := Albaranes; end; end; end.