Tecsitel_FactuGES2/Source/Modulos/Facturas de proveedor/Views/uEditorFacturasProveedor.pas

407 lines
12 KiB
ObjectPascal

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.