Tecsitel_FactuGES2/Source/Modulos/Pedidos a proveedor/Views/uViewDatosYSeleccionProveedorPedido.pas

434 lines
14 KiB
ObjectPascal
Raw Blame History

unit uViewDatosYSeleccionProveedorPedido;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uViewBase, StdCtrls, cxControls, cxContainer, cxEdit, cxLabel,
cxDBLabel, ExtCtrls, DB, uDADataTable, uBizContactos,
ComCtrls, ToolWin, ActnList, ImgList, PngImageList, cxTextEdit, cxDBEdit,
pngimage, JvExControls, JvComponent, JvButton, JvTransparentButton, Mask,
DBCtrls, uProveedoresController, dxLayoutControl, Buttons, uDAInterfaces,
cxMaskEdit, cxButtonEdit, uBizPedidosProveedor, uBizDireccionesContacto,
uDireccionesContactoController, Menus, cxLookAndFeelPainters, cxButtons,
cxMemo;
type
IViewDatosYSeleccionProveedorPedido = interface(IViewBase)
['{F1E1FFC0-02C9-47F5-92BC-BE10FA2C5134}']
function GetPedido: IBizPedidoProveedor;
procedure SetPedido(const Value: IBizPedidoProveedor);
property Pedido: IBizPedidoProveedor read GetPedido write SetPedido;
function GetProveedor: IBizProveedor;
procedure SetProveedor(Value: IBizProveedor);
property Proveedor: IBizProveedor read GetProveedor write SetProveedor;
function GetID_Proveedor: integer;
procedure SetID_Proveedor(const Value: integer);
property ID_Proveedor: integer read GetID_Proveedor write SetID_Proveedor;
function GetOnProveedorChanged : TNotifyEvent;
procedure SetOnProveedorChanged (const Value : TNotifyEvent);
property OnProveedorChanged : TNotifyEvent read GetOnProveedorChanged
write SetOnProveedorChanged;
procedure ElegirPersonaContacto;
procedure ElegirDireccionProveedor;
procedure ElegirProveedor;
procedure VerFichaProveedor;
procedure AnadirNuevoProveedor;
procedure RefrescarDireccion;
end;
TfrViewDatosYSeleccionProveedorPedido = class(TfrViewBase, IViewDatosYSeleccionProveedorPedido)
dsProveedor: TDADataSource;
ActionList1: TActionList;
actElegirContacto: TAction;
actAnadirContacto: TAction;
actVerContacto: TAction;
dxLayoutControl1Group_Root: TdxLayoutGroup;
dxLayoutControl1: TdxLayoutControl;
dxLayoutControl1Item1: TdxLayoutItem;
edtlNombre: TcxDBTextEdit;
dxLayoutControl1Item2: TdxLayoutItem;
edtCODIGO_ASIGNADO: TcxDBTextEdit;
dsPedido: TDADataSource;
actElegirDireccion: TAction;
actElegirPersonaContacto: TAction;
dxLayoutControl1Item3: TdxLayoutItem;
edtPersonaContacto: TcxDBTextEdit;
dxLayoutControl1Group4: TdxLayoutGroup;
dxLayoutControl1Item4: TdxLayoutItem;
edtDireccion: TcxMemo;
Button4: TButton;
dxLayoutControl1Item5: TdxLayoutItem;
dxLayoutControl1Group3: TdxLayoutGroup;
dxLayoutControl1Item6: TdxLayoutItem;
Button5: TButton;
dxLayoutControl1Group5: TdxLayoutGroup;
dxLayoutControl1Item9: TdxLayoutItem;
Button3: TBitBtn;
dxLayoutControl1Group2: TdxLayoutGroup;
dxLayoutControl1Item7: TdxLayoutItem;
Button1: TBitBtn;
dxLayoutControl1Item10: TdxLayoutItem;
BitBtn1: TBitBtn;
dxLayoutControl1Group1: TdxLayoutGroup;
PngImageList: TPngImageList;
procedure actElegirContactoExecute(Sender: TObject);
procedure actAnadirContactoExecute(Sender: TObject);
procedure actVerContactoUpdate(Sender: TObject);
procedure edtPersonaContactoPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure edtDireccionPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure actVerContactoExecute(Sender: TObject);
procedure actElegirDireccionUpdate(Sender: TObject);
procedure actElegirDireccionExecute(Sender: TObject);
procedure actElegirPersonaContactoExecute(Sender: TObject);
procedure actElegirPersonaContactoUpdate(Sender: TObject);
private
FOnProveedorChanged : TNotifyEvent;
FMsgElegirProveedor: String;
protected
FProveedoresController : IProveedoresController;
FDireccionesController : IDireccionesContactoController;
FPedido : IBizPedidoProveedor;
FProveedor : IBizProveedor;
FDireccion : IBizDireccionesContacto;
function GetProveedor: IBizProveedor; virtual;
procedure SetProveedor(Value: IBizProveedor); virtual;
function GetOnProveedorChanged : TNotifyEvent;
procedure SetOnProveedorChanged (const Value : TNotifyEvent);
procedure SetReadOnly(Value: Boolean); override;
function GetID_Proveedor: integer; virtual;
procedure SetID_Proveedor(const Value: integer); virtual;
function GetPedido: IBizPedidoProveedor;
procedure SetPedido(const Value: IBizPedidoProveedor);
procedure EscribirTextoDireccion;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ElegirPersonaContacto;
procedure ElegirDireccionProveedor;
procedure ElegirProveedor;
procedure VerFichaProveedor;
procedure AnadirNuevoProveedor;
procedure RefrescarDireccion;
property Pedido: IBizPedidoProveedor read GetPedido write SetPedido;
property Proveedor: IBizProveedor read GetProveedor write SetProveedor;
property OnProveedorChanged : TNotifyEvent read GetOnProveedorChanged write SetOnProveedorChanged;
property ID_Proveedor: integer read GetID_Proveedor write SetID_Proveedor;
end;
implementation
{$R *.dfm}
uses
uDataModuleProveedores, Math, uCustomView, uBizContactosPersonal, uDialogUtils;
procedure TfrViewDatosYSeleccionProveedorPedido.actElegirContactoExecute(Sender: TObject);
begin
ElegirProveedor;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.actElegirDireccionExecute(
Sender: TObject);
begin
inherited;
ElegirDireccionProveedor;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.actElegirDireccionUpdate(
Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := not ReadOnly and Assigned(FProveedor.Direcciones) and
(FProveedor.Direcciones.Active) and (FProveedor.Direcciones.RecordCount > 0);
end;
procedure TfrViewDatosYSeleccionProveedorPedido.actElegirPersonaContactoExecute(
Sender: TObject);
begin
inherited;
ElegirPersonaContacto;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.actElegirPersonaContactoUpdate(
Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := not ReadOnly and Assigned(FProveedor.Personal) and
(FProveedor.Personal.Active) and (FProveedor.Personal.RecordCount > 0);
end;
procedure TfrViewDatosYSeleccionProveedorPedido.actAnadirContactoExecute(
Sender: TObject);
begin
AnadirNuevoProveedor;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.actVerContactoExecute(
Sender: TObject);
begin
inherited;
VerFichaProveedor;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.actVerContactoUpdate(Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := (Length(edtlNombre.Text) > 0);
end;
procedure TfrViewDatosYSeleccionProveedorPedido.AnadirNuevoProveedor;
var
AProveedor : IBizProveedor;
begin
inherited;
AProveedor := (FProveedoresController.Nuevo as IBizProveedor);
FProveedoresController.Ver(AProveedor);
Self.Proveedor := AProveedor;
end;
constructor TfrViewDatosYSeleccionProveedorPedido.Create(AOwner: TComponent);
begin
inherited;
FMsgElegirProveedor := 'Elija el proveedor al que se le realizar<61> el pedido.';
FProveedoresController := TProveedoresController.Create;
FDireccionesController := TDireccionesContactoController.Create;
edtlNombre.Enabled := False;
edtCODIGO_ASIGNADO.Enabled := False;
edtDireccion.Enabled := False;
edtPersonaContacto.Enabled := False;
end;
destructor TfrViewDatosYSeleccionProveedorPedido.Destroy;
begin
FProveedoresController := NIL;
FDireccionesController := NIL;
inherited;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.edtDireccionPropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
begin
inherited;
ElegirDireccionProveedor;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.edtPersonaContactoPropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
begin
inherited;
ElegirPersonaContacto;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.ElegirProveedor;
var
AProveedor : IBizProveedor;
begin
inherited;
AProveedor := (FProveedoresController.ElegirContacto(FProveedoresController.BuscarTodos, FMsgElegirProveedor, False) as IBizProveedor);
if Assigned(AProveedor) then
Self.Proveedor := AProveedor;
AProveedor := Nil;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.ElegirDireccionProveedor;
var
ADireccion : IBizDireccionesContacto;
begin
inherited;
ADireccion := FProveedoresController.ElegirDireccionEntrega(FProveedor, ' ');
if Assigned(ADireccion) then
begin
FDireccion := ADireccion;
FPedido.Edit;
if FDireccion.IDIsNull then
begin
FPedido.ClearField('ID_DIRECCION');
FPedido.ClearField('IMPORTE_PORTE');
end
else begin
FPedido.ID_DIRECCION := FDireccion.ID;
FPedido.IMPORTE_PORTE := FDireccion.PORTE;
end;
FPedido.PERSONA_CONTACTO_PROV := FDireccion.PERSONA_CONTACTO;
EscribirTextoDireccion;
end;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.ElegirPersonaContacto;
var
APersona : IBizContactoPersonal;
begin
inherited;
APersona := FProveedoresController.ElegirPersonaContacto(FProveedor.Personal,
'El proveedor dispone de personas de contacto dadas de alta en su ficha. Seleccione la que quiere utilizar.');
if Assigned(APersona) then
begin
FPedido.Edit;
FPedido.PERSONA_CONTACTO_PROV := APersona.NOMBRE;
end;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.EscribirTextoDireccion;
var
ACadena : String;
begin
ACadena := '';
if Assigned(FDireccion) then
begin
ACadena := Format('%s %s %s %s',
[FDireccion.CALLE, FDireccion.POBLACION,
FDireccion.CODIGO_POSTAL, FDireccion.PROVINCIA]);
if not FDireccion.FAXIsNull then
ACadena := ACadena + #13#10 + 'Fax: ' + FDireccion.FAX;
end;
edtDireccion.Text := ACadena;
end;
function TfrViewDatosYSeleccionProveedorPedido.GetProveedor: IBizProveedor;
begin
Result := FProveedor;
end;
function TfrViewDatosYSeleccionProveedorPedido.GetID_Proveedor: integer;
begin
Result := -1;
if Assigned(FProveedor) then
Result := FProveedor.ID;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.SetProveedor(Value: IBizProveedor);
begin
FProveedor := Value;
if Assigned(FProveedor) then
begin
dsProveedor.DataTable := FProveedor.DataTable;
if not FProveedor.DataTable.Active then
FProveedor.DataTable.Active := True;
//Solo podremos establecer persona de contacto si se ha asignado un proveedor
if FProveedor.ID > 0 then
edtPersonaContacto.Enabled := True;
if FProveedor.Direcciones.RecordCount > 0 then
ElegirDireccionProveedor
else begin
FPedido.Edit;
FPedido.PERSONA_CONTACTO_PROV := FProveedor.PERSONA_CONTACTO;
RefrescarDireccion;
end;
end
else begin
dsProveedor.DataTable := NIL;
FProveedor := NIL;
FDireccion := NIL;
edtPersonaContacto.Enabled := False;
end;
if Assigned(FOnProveedorChanged) then
FOnProveedorChanged(Self);
end;
procedure TfrViewDatosYSeleccionProveedorPedido.SetID_Proveedor(const Value: integer);
begin
Self.Proveedor := IBizProveedor(FProveedoresController.Buscar(Value));
end;
function TfrViewDatosYSeleccionProveedorPedido.GetOnProveedorChanged: TNotifyEvent;
begin
Result := FOnProveedorChanged;
end;
function TfrViewDatosYSeleccionProveedorPedido.GetPedido: IBizPedidoProveedor;
begin
Result := FPedido;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.RefrescarDireccion;
begin
FDireccion := FDireccionesController.Nuevo;
if (not FPedido.ID_DIRECCIONIsNull) and
(FDireccionesController.Localizar(FProveedor.Direcciones, FPedido.ID_DIRECCION)) then
FDireccionesController.CopiarDireccion(FProveedor.Direcciones, FDireccion)
else
FDireccionesController.CopiarDireccionFiscal(FProveedor, FDireccion);
EscribirTextoDireccion;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.SetOnProveedorChanged(
const Value: TNotifyEvent);
begin
FOnProveedorChanged := Value;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.SetPedido(
const Value: IBizPedidoProveedor);
begin
FPedido := Value;
if Assigned(FPedido) then
begin
dsPedido.DataTable := FPedido.DataTable;
FProveedor := FPedido.Proveedor;
dsProveedor.DataTable := FProveedor.DataTable;
if not FProveedor.DataTable.Active then
FProveedor.DataTable.Active := True;
//Solo podremos establecer persona de contacto si se ha asignado un proveedor
if FProveedor.ID > 0 then
edtPersonaContacto.Enabled := True;
RefrescarDireccion;
end
else begin
dsPedido.DataTable := NIL;
FProveedor := NIL;
FDireccion := NIL;
end;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.SetReadOnly(Value: Boolean);
begin
inherited;
if (csLoading in Self.ComponentState) then
Exit;
actAnadirContacto.Enabled := not ReadOnly;
actElegirContacto.Enabled := not ReadOnly;
edtPersonaContacto.Enabled := not ReadOnly;
end;
procedure TfrViewDatosYSeleccionProveedorPedido.VerFichaProveedor;
begin
if not Assigned(Proveedor) then
ShowErrorMessage('No se ha indicado un proveedor', 'El pedido no tiene ning<6E>n proveedor asociado a mostrar.')
else begin
FProveedoresController.Ver(Proveedor);
end;
end;
end.