AbetoDesign_FactuGES2/Source/Modulos/Pedidos a proveedor/Views/uEditorPedidosProveedor.pas

460 lines
14 KiB
ObjectPascal

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;
TBXItem38: TTBXItem;
ActEnviarEMail: TAction;
actCambiarSituacion: TAction;
TBXItem40: TTBXItem;
TBXSeparatorItem17: TTBXSeparatorItem;
procedure FormShow(Sender: TObject);
procedure actRecibirPedidoUpdate(Sender: TObject);
procedure actRecibirPedidoExecute(Sender: TObject);
procedure actEliminarUpdate(Sender: TObject);
procedure ActEnviarEMailExecute(Sender: TObject);
procedure ActEnviarEMailUpdate(Sender: TObject);
procedure actCambiarSituacionUpdate(Sender: TObject);
procedure actCambiarSituacionExecute(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,
// uInventarioController, uBizInventario,
uDialogUtils, uGridUtils, uDBSelectionListUtils,
// uAlbaranesProveedorController, uBizAlbaranesProveedor,
// uGenerarPedidosProvUtils,
uEditorElegirSituacionPedido,
uGenerarAlbaranesProvUtils, uBizDetallesPedidoProveedor;
{$R *.dfm}
{
*************************** TfEditorPedidosProveedor ***************************
}
procedure TfEditorPedidosProveedor.actCambiarSituacionExecute(Sender: TObject);
var
APedidos: IBizPedidoProveedor;
AEditor : TfEditorElegirSituacionPedido;
ASituacion : Variant;
begin
inherited;
ViewGrid.SaveGridStatus;
try
SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Pedidos as ISeleccionable).SelectedRecords);
APedidos := (Controller as IPedidosProveedorController).ExtraerSeleccionados(Pedidos) as IBizPedidoProveedor;
finally
ViewGrid.RestoreGridStatus;
end;
AEditor := TfEditorElegirSituacionPedido.Create(NIL);
try
if (AEditor.ShowModal = mrOk) then
begin
ASituacion := AEditor.Situacion;
if Controller.AsignarSituacion(ASituacion, APedidos) then
RefrescarInterno;
end;
finally
AEditor.Release;
end;
end;
procedure TfEditorPedidosProveedor.actCambiarSituacionUpdate(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;
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);
var
FVerPrecios: Boolean;
begin
inherited;
FVerPrecios := (ShowConfirmMessage('Previsualizar documento', '¿Desea previsualizar documento con sus importes?') = IDYES);
FController.EnviarPedidoPorEMail(FPedidos, FVerPrecios);
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.actRecibirPedidoExecute(Sender: TObject);
var
ARespuesta : Integer;
AArticulosPendientes: IBizDetallesPedidoProveedorPend;
begin
inherited;
{ AArticulosPendientes := ArticulosPendientesDeRecibir(FPedidos.ID);
if AArticulosPendientes.DataTable.RecordCount = 0 then
begin
ARespuesta := ShowConfirmMessage('Generar albarán a partir del pedido', 'Todos los artículos de este pedido ya figuran en uno o más albaranes de proveedor.' +
#10#13 + '¿Desea generar de todas formas otro albarán para este pedido?');
if (ARespuesta = IDNO) then
Exit; // Aunque es un exit, se ejecuta la parte del finally antes de salir.
end;
}
GenerarAlbaranProv(FPedidos.ID);
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;
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;
//Para que coja el ancho automático
actAnchoAuto.Execute;
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;
FVerPrecios : Boolean;
begin
APedidos := 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, (Pedidos as ISeleccionable).SelectedRecords);
APedidos := (Controller as IPedidosProveedorController).ExtraerSeleccionados(Pedidos) as IBizPedidoProveedor;
end
else
APedidos := Pedidos;
if Assigned(APedidos) then
FVerPrecios := (ShowConfirmMessage('Previsualizar documento', '¿Desea previsualizar documento con sus importes?') = IDYES);
FController.Print(APedidos, AllItems);
end;
end;
end;
end;
end;
procedure TfEditorPedidosProveedor.ModificarInterno;
begin
inherited;
FController.Ver(Pedidos);
end;
procedure TfEditorPedidosProveedor.NuevoInterno;
var
Respuesta : Integer;
begin
inherited;
// 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;
//TEMPORAL
actRefrescar.Execute;
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 := 'Lista de pedidos a proveedor - ' + AppFactuGES.EmpresaActiva.NOMBRE;
inherited PonerTitulos(FTitulo);
end;
procedure TfEditorPedidosProveedor.PrevisualizarInterno;
var
Respuesta : Integer;
APedidos: IBizPedidoProveedor;
AllItems: Boolean;
FVerPrecios : Boolean;
begin
APedidos := 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 := 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
FVerPrecios := (ShowConfirmMessage('Previsualizar documento', '¿Desea previsualizar documento con sus importes?') = IDYES);
FController.Preview(APedidos, AllItems, FVerPrecios);
end;
end;
end;
end;
end;
end;
procedure TfEditorPedidosProveedor.RefrescarInterno;
begin
//Volvemos a cargar los años de las facturas
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.