Tecsitel_FactuGES2/Source/Modulos/Pedidos a proveedor/Views/uEditorPedidoProveedor.pas
david 1662789ccc * Ticket #166 -> En los pedidos a proveedor poder elegir una dirección si el proveedor tiene varias sucursales
* Repaso a presupuestos (apariencia de editor ficha).
* Limpieza de código repetido en contactos.

git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@784 0c75b7a4-871f-7646-8a2f-f78d34cc349f
2008-11-27 16:14:51 +00:00

344 lines
10 KiB
ObjectPascal
Raw Blame History

unit uEditorPedidoProveedor;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uEditorDBItem, DB, uDADataTable, JvAppStorage,
JvAppRegistryStorage, JvComponent, JvFormPlacement, ImgList,
PngImageList, StdActns, ActnList, ComCtrls, TBX, TB2Item, TB2Dock,
TB2Toolbar, ExtCtrls, JvExControls, JvNavigationPane,
uViewPedidoProveedor, uCustomView, uViewBase, JvComponentBase,
StdCtrls, pngimage, AppEvnts, cxControls, cxContainer, cxEdit, cxTextEdit, cxMemo, cxDBEdit,
uViewIncidencias,
uBizPedidosProveedor, uIEditorPedidoProveedor, uPedidosProveedorController,
uViewDetallesBase, uViewDetallesPedidoProveedor,
dxLayoutLookAndFeels, JvExComCtrls, JvStatusBar, uViewTotales,
uViewDetallesDTO, uViewDetallesArticulos, uDAInterfaces, cxLabel;
type
TfEditorPedidoProveedor = class(TfEditorDBItem, IEditorPedidoProveedor)
pagContenido: TTabSheet;
pagInicidencias: TTabSheet;
frViewIncidenciasProv: TfrViewIncidencias;
frViewDetallesPedidoProveedor1: TfrViewDetallesPedidoProveedor;
dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList;
dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel;
frViewTotales1: TfrViewTotales;
TBXSubmenuItem2: TTBXSubmenuItem;
TBXItem7: TTBXItem;
actEnviarEMail: TAction;
TBXSeparatorItem6: TTBXSeparatorItem;
TBXItem33: TTBXItem;
procedure FormShow(Sender: TObject);
procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction);
procedure pgPaginasChanging(Sender: TObject; var AllowChange: Boolean);
procedure frViewTotales1ePortePropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
procedure actEnviarEMailUpdate(Sender: TObject);
procedure actEnviarEMailExecute(Sender: TObject);
private
procedure RecalcularPortePorUnidad;
protected
FPedido: IBizPedidoProveedor;
FViewPedido: IViewPedidoProveedor;
FController : IPedidosProveedorController;
function GetController : IPedidosProveedorController;
procedure SetController (const Value : IPedidosProveedorController); virtual;
function GetPedido: IBizPedidoProveedor;
procedure SetPedido(const Value: IBizPedidoProveedor); virtual;
function GetViewPedido: IViewPedidoProveedor;
procedure SetViewPedido(const Value: IViewPedidoProveedor);
procedure GuardarInterno; override;
procedure EliminarInterno; override;
procedure PrevisualizarInterno; override;
procedure ImprimirInterno; override;
procedure OnProveedorChanged(Sender : TObject);
//Si queremos crear otra vista para el editor heredado solo tendriamos que
//sobreescribir este metodo
procedure AsignarVista; virtual;
property ViewPedido: IViewPedidoProveedor read GetViewPedido write SetViewPedido;
public
procedure PonerTitulos(const ATitulo: string = ''); override;
property Controller : IPedidosProveedorController read GetController write SetController;
property Pedido: IBizPedidoProveedor read GetPedido write SetPedido;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
implementation
uses
uViewDatosYSeleccionProveedor, uDataModuleUsuarios, uGridStatusUtils, uDialogUtils,
uFactuGES_App, uDialogOpcionesImpresion;
{$R *.dfm}
{ TfEditorPedidoProveedor }
{
**************************** TfEditorPedidoProveedor ****************************
}
procedure TfEditorPedidoProveedor.actEnviarEMailExecute(Sender: TObject);
begin
inherited;
FController.EnviarPedidoPorEMail(Pedido);
end;
procedure TfEditorPedidoProveedor.actEnviarEMailUpdate(Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := HayDatos;
end;
procedure TfEditorPedidoProveedor.AsignarVista;
var
AViewPedidoProveedor: TfrViewPedidoProveedor;
begin
AViewPedidoProveedor := TfrViewPedidoProveedor.Create(Self);
with AViewPedidoProveedor do
begin
Parent := pagGeneral;
Align := alClient;
dxLayoutControl1.LookAndFeel := dxLayoutOfficeLookAndFeel1;
end;
ViewPedido := AViewPedidoProveedor;
end;
constructor TfEditorPedidoProveedor.Create(AOwner: TComponent);
begin
inherited;
pgPaginas.ActivePageIndex := 0;
AsignarVista;
end;
procedure TfEditorPedidoProveedor.CustomEditorClose(Sender: TObject;
var Action: TCloseAction);
begin
inherited;
FViewPedido := NIL;
FPedido := NIL;
end;
destructor TfEditorPedidoProveedor.Destroy;
begin
// Utilizar mejor OnClose;
inherited;
end;
procedure TfEditorPedidoProveedor.EliminarInterno;
begin
if (Application.MessageBox('<27>Desea borrar este pedido a proveedor?', 'Atenci<63>n', MB_YESNO) = IDYES) then
begin
FController.Eliminar(FPedido);
inherited
end
end;
procedure TfEditorPedidoProveedor.FormShow(Sender: TObject);
begin
inherited;
if not Assigned(FViewPedido) then
raise Exception.Create('No hay ninguna vista asignada');
if not Assigned(Pedido) then
raise Exception.Create('No hay ning<6E>n pedido asignado');
Pedido.DataTable.Active := True;
pgPaginas.ActivePage := pagGeneral;
end;
procedure TfEditorPedidoProveedor.frViewTotales1ePortePropertiesValidate(
Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
begin
inherited;
if (not VarIsNull(DisplayValue)) and (length(DisplayValue) > 0) then
FPedido.IMPORTE_PORTE := DisplayValue
else
FPedido.IMPORTE_PORTE := 0;
RecalcularPortePorUnidad;
end;
function TfEditorPedidoProveedor.GetController: IPedidosProveedorController;
begin
Result := FController;
end;
function TfEditorPedidoProveedor.GetPedido: IBizPedidoProveedor;
begin
Result := FPedido;
end;
function TfEditorPedidoProveedor.GetViewPedido: IViewPedidoProveedor;
begin
Result := FViewPedido;
end;
procedure TfEditorPedidoProveedor.GuardarInterno;
var
bEsNuevo : Boolean;
begin
inherited;
ShowHourglassCursor;
// frViewDetallesPedidoProveedor1.SaveGridStatus; // Para guardar estado del grid
frViewDetallesPedidoProveedor1.BeginUpdate; // Para que no se mueva el foco
try
bEsNuevo := FPedido.EsNuevo;
FController.Guardar(FPedido);
finally
frViewDetallesPedidoProveedor1.EndUpdate;
// frViewDetallesPedidoProveedor1.RestoreGridStatus;
HideHourglassCursor;
end;
if bEsNuevo then
ShowInfoMessage('El pedido se ha dado de alta con el c<>digo ' + FPedido.REFERENCIA);
Modified := False;
end;
procedure TfEditorPedidoProveedor.ImprimirInterno;
var
AllItems: Boolean;
FImprimirPrecios : Boolean;
FImprimirRefProveedor : Boolean;
begin
inherited;
AllItems := False;
FImprimirPrecios := True;
FImprimirRefProveedor := True;
if ElegirOpcionesImpresionPedidoProveedor(FImprimirPrecios, FImprimirRefProveedor) then
FController.Print(FPedido, AllItems, FImprimirPrecios, FImprimirRefProveedor);
end;
procedure TfEditorPedidoProveedor.OnProveedorChanged(Sender: TObject);
begin
if Assigned(FPedido) then
begin
FPedido.Proveedor := ViewPedido.ViewProveedorPedido.Proveedor;
// Si el pedido tiene detalles hay que mirar si los descuentos y otros campos
// para los art<72>culos hay que cambiarlos.
if (FPedido.Detalles.RecordCount > 0) then
FController.DetallesController.ActualizarDetalles(FPedido.Detalles, FPedido.Proveedor);
end;
end;
procedure TfEditorPedidoProveedor.pgPaginasChanging(Sender: TObject; var AllowChange: Boolean);
begin
inherited;
if (not Assigned(FPedido))
or (FPedido.ID_PROVEEDOR = 0) then
begin
ShowWarningMessage('Antes de introducir conceptos debe elegir un proveedor para este pedido');
AllowChange := False;
end;
end;
procedure TfEditorPedidoProveedor.PonerTitulos(const ATitulo: string);
var
FTitulo : String;
begin
FTitulo := ATitulo;
if (FTitulo = '') and Assigned(FPedido) then
begin
if FPedido.EsNuevo then
FTitulo := 'Nuevo pedido a proveedor'
else
FTitulo := 'Pedido a proveedor' + ' - ' + FPedido.Proveedor.Nombre + ' - (' + FPedido.SITUACION + ')';
end;
inherited PonerTitulos(FTitulo);
Self.Caption := FTitulo + ' (' + AppFactuGES.EmpresaActiva.NOMBRE + ')';
end;
procedure TfEditorPedidoProveedor.PrevisualizarInterno;
var
AllItems: Boolean;
FImprimirPrecios : Boolean;
FImprimirRefProveedor : Boolean;
begin
inherited;
AllItems := False;
FImprimirPrecios := True;
FImprimirRefProveedor := True;
if ElegirOpcionesImpresionPedidoProveedor(FImprimirPrecios, FImprimirRefProveedor) then
FController.Preview(FPedido, AllItems, FImprimirPrecios, FImprimirRefProveedor);
end;
procedure TfEditorPedidoProveedor.RecalcularPortePorUnidad;
begin
//Esta l<>gica se llamar<61> en el editor porque es para facilitar el rellenado de informaci<63>n del documento
//no puede ir en la clase de negocio porque no es una l<>gica que tenga sentido fuera del editor.
if Assigned(Controller)
and Assigned(Controller.DetallesController) then
Controller.DetallesController.DesglosarPorteDetalles(FPedido.IMPORTE_PORTE, FPedido.Detalles)
end;
procedure TfEditorPedidoProveedor.SetController(const Value: IPedidosProveedorController);
begin
FController := Value;
if Assigned(FController) then
begin
if Assigned(FViewPedido) then
FViewPedido.Controller := Controller;
frViewDetallesPedidoProveedor1.Controller := Controller.DetallesController;
end;
end;
procedure TfEditorPedidoProveedor.SetPedido(const Value: IBizPedidoProveedor);
begin
FPedido := Value;
if Assigned(FPedido) then
begin
dsDataTable.DataTable := FPedido.DataTable;
frViewTotales1.DADataSource.DataTable := dsDataTable.DataTable;
frViewIncidenciasProv.DADataSource.DataTable := dsDataTable.DataTable;
if Assigned(FViewPedido) then
begin
ViewPedido.ViewProveedorPedido.OnProveedorChanged := NIL;
try
FViewPedido.Pedido := FPedido;
frViewDetallesPedidoProveedor1.Detalles := FPedido.Detalles;
frViewDetallesPedidoProveedor1.Pedido := FPedido; //Para poder sacar los articulos del proveedor seleccionado
finally
ViewPedido.ViewProveedorPedido.OnProveedorChanged := OnProveedorChanged;
end;
end;
end;
end;
procedure TfEditorPedidoProveedor.SetViewPedido(const Value: IViewPedidoProveedor);
begin
FViewPedido := Value;
if Assigned(FViewPedido) and Assigned(Pedido) then
FViewPedido.Pedido := Pedido;
end;
end.