unit uEditorPedidosProveedor; 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, uBizPedidosProveedor, uIEditorPedidosProveedor, uPedidosProveedorController, uCustomView, uViewBase, uViewBarraSeleccion, uViewGridBase, uViewPedidosProveedor, JvExComCtrls, JvStatusBar, JSDialog, uDAInterfaces; type TfEditorPedidosProveedor = class(TfEditorGridBase, IEditorPedidosProveedor) frViewPedidosProveedor1: TfrViewPedidosProveedor; N4: TMenuItem; Cambiarsituacin1: TMenuItem; actRecibirPedido: TAction; JsNuevoPedidoProveedorDialog: TJSDialog; JsPrevisualizarDialog: TJSDialog; JsImprimirDialog: TJSDialog; TBXItem39: TTBXItem; JsListaPedidosNoEliminados: TJSDialog; actFacturarPedido: TAction; TBXItem38: TTBXItem; actEnviarEMail: TAction; TBXItem40: TTBXItem; Acercade1: TMenuItem; actInformes: TAction; TBXItem41: TTBXItem; JSInformesDialog: TJSDialog; procedure FormShow(Sender: TObject); procedure actCambiarSituacionExecute(Sender: TObject); procedure actRecibirPedidoUpdate(Sender: TObject); procedure actRecibirPedidoExecute(Sender: TObject); procedure actEliminarUpdate(Sender: TObject); procedure actFacturarPedidoExecute(Sender: TObject); procedure actFacturarPedidoUpdate(Sender: TObject); procedure actEnviarEMailExecute(Sender: TObject); procedure actEnviarEMailUpdate(Sender: TObject); procedure actInformesExecute(Sender: TObject); procedure OnListaAnosChange(Sender: TObject; const Text: string); protected FPedidos: IBizPedidoProveedor; FController : IPedidosProveedorController; function GetPedidos: IBizPedidoProveedor; procedure SetPedidos(const Value: IBizPedidoProveedor); function GetController : IPedidosProveedorController; virtual; procedure SetController (const Value : IPedidosProveedorController); virtual; procedure NuevoInterno; override; procedure ModificarInterno; override; procedure EliminarInterno; override; procedure DuplicarInterno; override; procedure ImprimirInterno; override; procedure PrevisualizarInterno; override; procedure RefrescarInterno; override; public procedure PonerTitulos(const ATitulo: string = ''); override; property Pedidos: IBizPedidoProveedor read GetPedidos write SetPedidos; property Controller : IPedidosProveedorController read GetController write SetController; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation uses uDataModulePedidosProveedor, uDataModuleUsuarios, uFactuGES_App, uEditorDBBase, uGenerarAlbaranesProvUtils, uGenerarFacturasProvPedUtils, // uInventarioController, uBizInventario, uDialogUtils, uGridStatusUtils, uDBSelectionListUtils, uDialogOpcionesImpresionPedidosProveedor, uGestorInformesController; // uAlbaranesProveedorController, uBizAlbaranesProveedor, // uGenerarPedidosProvUtils, ; {$R *.dfm} { *************************** TfEditorPedidosProveedor *************************** } procedure TfEditorPedidosProveedor.actCambiarSituacionExecute(Sender: TObject); begin { inherited; FController.CambiarSituacion(FPedidos) } end; procedure TfEditorPedidosProveedor.actEliminarUpdate(Sender: TObject); begin inherited; if (Sender as TAction).Enabled then (Sender as TAction).Enabled := (FPedidos.SITUACION = SITUACION_PEDIDO_PENDIENTE); end; procedure TfEditorPedidosProveedor.actEnviarEMailExecute(Sender: TObject); begin inherited; FController.EnviarPedidoPorEMail(FPedidos); end; procedure TfEditorPedidosProveedor.actEnviarEMailUpdate(Sender: TObject); begin inherited; if HayDatos and Assigned(ViewGrid) then (Sender as TAction).Enabled := ViewGrid.EsSeleccionCeldaDatos and (ViewGrid.NumSeleccionados > 0) else (Sender as TAction).Enabled := False; end; procedure TfEditorPedidosProveedor.actFacturarPedidoExecute(Sender: TObject); begin inherited; if (ShowConfirmMessage('Generar factura', Format('¿Desea copiar todos los conceptos del pedido %s a la factura?', [Pedidos.REFERENCIA])) = IDYES) then GenerarFacturaProvPed(Pedidos.ID) else GenerarFacturaProvPed(Pedidos.ID, False); actRefrescar.Execute; end; procedure TfEditorPedidosProveedor.actFacturarPedidoUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := HayDatos and not (ViewGrid.NumSeleccionados > 1) and (FPedidos.REF_FACTURA_PROV = '') and ViewGrid.esSeleccionCeldaDatos; end; procedure TfEditorPedidosProveedor.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.VerInformeListadoPedidos; end; end; end; finally AGestorInformesController := NIL; end; end; procedure TfEditorPedidosProveedor.actRecibirPedidoExecute(Sender: TObject); begin inherited; RecibirPedidoProv(FPedidos); actRefrescar.Execute; end; procedure TfEditorPedidosProveedor.actRecibirPedidoUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := HayDatos and not (ViewGrid.NumSeleccionados > 1) and ViewGrid.esSeleccionCeldaDatos and (FPedidos.SITUACION <> SITUACION_PEDIDO_RECIBIDO); end; constructor TfEditorPedidosProveedor.Create(AOwner: TComponent); begin inherited; FHeaderText := 'Lista de pedidos a proveedor'; FWindowCaption := FHeaderText; ViewGrid := frViewPedidosProveedor1; //CreateView(TfrViewPedidosProveedor) as IViewPedidosProveedor; end; destructor TfEditorPedidosProveedor.Destroy; begin FPedidos := NIL; FController := NIL; inherited; end; procedure TfEditorPedidosProveedor.DuplicarInterno; var APedido : IBizPedidoProveedor; begin inherited; APedido := FController.Duplicar(Pedidos); try FController.Ver(APedido); finally actRefrescar.Execute; end; end; procedure TfEditorPedidosProveedor.EliminarInterno; var APedidos: IBizPedidoProveedor; AllItems: Boolean; begin APedidos := Nil; AllItems := False; if MultiSelect and Assigned(ViewGrid) then AllItems := (ViewGrid.NumSeleccionados > 1); if AllItems then begin if (Application.MessageBox('¿Desea borrar los pedidos de proveedor seleccionados?', 'Atención', MB_YESNO) = IDYES) then begin SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Pedidos as ISeleccionable).SelectedRecords); APedidos := (Controller as IPedidosProveedorController).ExtraerSeleccionados(Pedidos) as IBizPedidoProveedor; end end else begin if (Application.MessageBox('¿Desea borrar el pedido de proveedor seleccionado?', 'Atención', MB_YESNO) = IDYES) then APedidos := Pedidos; end; if Assigned(APedidos) then begin FController.Eliminar(APedidos, AllItems); if AllItems then begin if (APedidos.DataTable.RecordCount > 0) then begin with APedidos.DataTable do begin First; while not EOF do begin JsListaPedidosNoEliminados.Content.Add('Ref. pedido: ' + APedidos.REFERENCIA + ' ' + APedidos.NOMBRE); Next; end; end; JsListaPedidosNoEliminados.Execute; end; actRefrescar.Execute; end; end; ViewGrid.GotoFirst; end; procedure TfEditorPedidosProveedor.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(Pedidos) then raise Exception.Create('No hay ningún pedido asignado'); Pedidos.DataTable.Active := True; ViewGrid.GotoFirst; end; function TfEditorPedidosProveedor.GetController: IPedidosProveedorController; begin Result := FController; end; function TfEditorPedidosProveedor.GetPedidos: IBizPedidoProveedor; begin Result := FPedidos; end; procedure TfEditorPedidosProveedor.ImprimirInterno; var Respuesta : Integer; APedidos: IBizPedidoProveedor; AllItems: Boolean; FImprimirPrecios : Boolean; FImprimirRefProveedor : Boolean; begin APedidos := 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 := 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, (Pedidos as ISeleccionable).SelectedRecords); APedidos := (Controller as IPedidosProveedorController).ExtraerSeleccionados(Pedidos) as IBizPedidoProveedor; end else APedidos := Pedidos; if Assigned(APedidos) then if ElegirOpcionesImpresionPedidoProveedor(FImprimirPrecios, FImprimirRefProveedor) then FController.Print(APedidos, AllItems, FImprimirPrecios, FImprimirRefProveedor); end; end; end; end; end; procedure TfEditorPedidosProveedor.ModificarInterno; begin inherited; FController.Ver(Pedidos); end; procedure TfEditorPedidosProveedor.NuevoInterno; {var Respuesta : Integer;} begin inherited; // Para Tecsitel: No preguntar si hacer el pedido de proveedor // basado en pedido de cliente. { Respuesta := JsNuevoPedidoProveedorDialog.Execute; if Respuesta <> IDCANCEL then begin case JsNuevoPedidoProveedorDialog.CustomButtonResult of 200 : begin // Utilizar un pedido // GenerarPedidosProv; actRefrescar.Execute; end; 100 : begin // Pedido nuevo vacio FController.Anadir(Pedidos); FController.Ver(Pedidos); end; end; end;} // Pedido nuevo vacio FController.Anadir(Pedidos); FController.Ver(Pedidos); end; procedure TfEditorPedidosProveedor.OnListaAnosChange(Sender: TObject; const Text: string); begin Controller.FiltrarAno(Pedidos, DynWhereDataTable, Text); if Pedidos.DataTable.Active then RefrescarInterno; end; procedure TfEditorPedidosProveedor.PonerTitulos(const ATitulo: string); var FTitulo : String; begin FTitulo := FWindowCaption + ' - ' + AppFactuGES.EmpresaActiva.NOMBRE; inherited PonerTitulos(FTitulo); end; procedure TfEditorPedidosProveedor.PrevisualizarInterno; var Respuesta : Integer; APedidos: IBizPedidoProveedor; AllItems: Boolean; FImprimirPrecios : Boolean; FImprimirRefProveedor : Boolean; begin APedidos := 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, (Pedidos as ISeleccionable).SelectedRecords); APedidos := (Controller as IPedidosProveedorController).ExtraerSeleccionados(Pedidos) as IBizPedidoProveedor; end else APedidos := Pedidos; if Assigned(APedidos) then begin if ElegirOpcionesImpresionPedidoProveedor(FImprimirPrecios, FImprimirRefProveedor) then FController.Preview(APedidos, AllItems, FImprimirPrecios, FImprimirRefProveedor); end; end; end; end; end; end; procedure TfEditorPedidosProveedor.RefrescarInterno; begin //Volvemos a cargar los años de los albaranes if Assigned(FController) then ListaAnos := FController.DarListaAnosPedidos; inherited; end; procedure TfEditorPedidosProveedor.SetController(const Value: IPedidosProveedorController); begin FController := Value; if Assigned(FController) then ListaAnos := FController.DarListaAnosPedidos; end; procedure TfEditorPedidosProveedor.SetPedidos(const Value: IBizPedidoProveedor); begin FPedidos := Value; if Assigned(FPedidos) 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 := FPedidos.DataTable.DynamicWhere.Xml; dsDataTable.DataTable := FPedidos.DataTable; if Assigned(ViewGrid) then (ViewGrid as IViewPedidosProveedor).Pedidos := Pedidos; end; end; end.