AlonsoYSal_FactuGES2/Source/Modulos/Albaranes de cliente/Views/uViewDatosYSeleccionClienteAlbaran.pas
2019-11-18 10:36:42 +00:00

417 lines
12 KiB
ObjectPascal
Raw Permalink Blame History

unit uViewDatosYSeleccionClienteAlbaran;
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, uClientesController, dxLayoutControl, Buttons, uDAInterfaces,
cxMaskEdit, cxButtonEdit, uBizAlbaranesCliente, uBizDireccionesContacto,
uDireccionesContactoController, Menus, cxLookAndFeelPainters, cxButtons,
cxMemo;
type
IViewDatosYSeleccionClienteAlbaran = interface(IViewBase)
['{7C180225-6C92-4F43-948A-4F67CD9A168D}']
function GetAlbaran: IBizAlbaranCliente;
procedure SetAlbaran(const Value: IBizAlbaranCliente);
property Albaran: IBizAlbaranCliente read GetAlbaran write SetAlbaran;
function GetCliente: IBizCliente;
procedure SetCliente(Value: IBizCliente);
property Cliente: IBizCliente read GetCliente write SetCliente;
function GetID_Cliente: integer;
procedure SetID_Cliente(const Value: integer);
property ID_Cliente: integer read GetID_Cliente write SetID_Cliente;
function GetOnClienteChanged : TNotifyEvent;
procedure SetOnClienteChanged (const Value : TNotifyEvent);
property OnClienteChanged : TNotifyEvent read GetOnClienteChanged
write SetOnClienteChanged;
procedure ElegirDireccionParaAlbaran;
procedure ElegirCliente;
procedure VerFichaCliente;
procedure AnadirNuevoCliente;
procedure RefrescarDireccion;
end;
TfrViewDatosYSeleccionClienteAlbaran = class(TfrViewBase, IViewDatosYSeleccionClienteAlbaran)
dsCliente: TDADataSource;
ActionList1: TActionList;
actElegirContacto: TAction;
actAnadirContacto: TAction;
actVerContacto: TAction;
PngImageList: TPngImageList;
dxLayoutControl1Group_Root: TdxLayoutGroup;
dxLayoutControl1: TdxLayoutControl;
dxLayoutControl1Item1: TdxLayoutItem;
edtlNombre: TcxDBTextEdit;
dxLayoutControl1Item2: TdxLayoutItem;
edtNIFCIF: TcxDBTextEdit;
bElegirCliente: TBitBtn;
dxLayoutControl1Item7: TdxLayoutItem;
bNuevoCliente: TBitBtn;
dxLayoutControl1Item8: TdxLayoutItem;
bVerFichaCliente: TBitBtn;
dxLayoutControl1Item9: TdxLayoutItem;
dxLayoutControl1Group1: TdxLayoutGroup;
dxLayoutControl1Group2: TdxLayoutGroup;
dsAlbaran: TDADataSource;
actElegirDireccion: TAction;
dxLayoutControl1Item4: TdxLayoutItem;
edtDireccion: TcxMemo;
bElegirDireccion: TButton;
dxLayoutControl1Item5: TdxLayoutItem;
dxLayoutControl1Item10: TdxLayoutItem;
edtTelefonos: TcxTextEdit;
dxLayoutControl1Item11: TdxLayoutItem;
edtReferencia: TcxDBTextEdit;
dxLayoutControl1Group6: TdxLayoutGroup;
dxLayoutControl1Group3: TdxLayoutGroup;
procedure actElegirContactoExecute(Sender: TObject);
procedure actAnadirContactoExecute(Sender: TObject);
procedure actVerContactoUpdate(Sender: TObject);
procedure edtDireccionPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure actVerContactoExecute(Sender: TObject);
procedure actElegirDireccionUpdate(Sender: TObject);
procedure actElegirDireccionExecute(Sender: TObject);
private
FOnClienteChanged : TNotifyEvent;
FMsgElegirCliente: String;
procedure EscribirTextoTelefonos;
protected
FClientesController : IClientesController;
FDireccionesController : IDireccionesContactoController;
FAlbaran : IBizAlbaranCliente;
FCliente : IBizCliente;
function GetCliente: IBizCliente; virtual;
procedure SetCliente(Value: IBizCliente); virtual;
function GetOnClienteChanged : TNotifyEvent;
procedure SetOnClienteChanged (const Value : TNotifyEvent);
procedure SetReadOnly(Value: Boolean); override;
function GetID_Cliente: integer; virtual;
procedure SetID_Cliente(const Value: integer); virtual;
function GetAlbaran: IBizAlbaranCliente;
procedure SetAlbaran(const Value: IBizAlbaranCliente);
procedure EscribirTextoDireccion;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ElegirDireccionParaAlbaran;
procedure ElegirCliente;
procedure VerFichaCliente;
procedure AnadirNuevoCliente;
procedure RefrescarDireccion;
property Albaran: IBizAlbaranCliente read GetAlbaran write SetAlbaran;
property Cliente: IBizCliente read GetCliente write SetCliente;
property OnClienteChanged : TNotifyEvent read GetOnClienteChanged write SetOnClienteChanged;
property ID_Cliente: integer read GetID_Cliente write SetID_Cliente;
end;
implementation
{$R *.dfm}
uses
uDataModuleClientes, Math, uCustomView, uDialogUtils;
procedure TfrViewDatosYSeleccionClienteAlbaran.actElegirContactoExecute(Sender: TObject);
begin
ElegirCliente;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.actElegirDireccionExecute(
Sender: TObject);
begin
inherited;
ElegirDireccionParaAlbaran;
RefrescarDireccion;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.actElegirDireccionUpdate(
Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := Assigned(FCliente) and
Assigned(FCliente.Direcciones) and (FCliente.Direcciones.Active)
and (FCliente.Direcciones.RecordCount > 0);
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.actAnadirContactoExecute(
Sender: TObject);
begin
AnadirNuevoCliente;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.actVerContactoExecute(
Sender: TObject);
begin
inherited;
VerFichaCliente;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.actVerContactoUpdate(Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := (Length(edtlNombre.Text) > 0);
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.AnadirNuevoCliente;
var
ACliente : IBizCliente;
begin
inherited;
ACliente := (FClientesController.Nuevo as IBizCliente);
FClientesController.Ver(ACliente);
Self.Cliente := ACliente;
end;
constructor TfrViewDatosYSeleccionClienteAlbaran.Create(AOwner: TComponent);
begin
inherited;
FMsgElegirCliente := 'Elija el cliente al que se le realizar<61> el albar<61>n.';
FClientesController := TClientesController.Create;
FDireccionesController := TDireccionesContactoController.Create;
edtlNombre.Enabled := False;
edtNIFCIF.Enabled := False;
edtDireccion.Enabled := False;
edtReferencia.Enabled := False;
edtTelefonos.Enabled := False;
end;
destructor TfrViewDatosYSeleccionClienteAlbaran.Destroy;
begin
FClientesController := NIL;
FDireccionesController := NIL;
inherited;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.edtDireccionPropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
begin
inherited;
ElegirDireccionParaAlbaran;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.ElegirCliente;
var
ACliente : IBizCliente;
begin
inherited;
ACliente := (FClientesController.ElegirContacto(FClientesController.BuscarTodos, FMsgElegirCliente, False) as IBizCliente);
if Assigned(ACliente) then
Self.Cliente := ACliente;
ACliente := Nil;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.ElegirDireccionParaAlbaran;
var
ADireccion : IBizDireccionesContacto;
begin
if FCliente.Direcciones.RecordCount > 0 then
ADireccion := FClientesController.ElegirDireccionEntrega(FCliente, 'El cliente dispone de varias direcciones. Seleccione la que quiere utilizar.')
else begin
ADireccion := FDireccionesController.Nuevo;
FDireccionesController.CopiarDireccionFiscal(FCliente, ADireccion);
end;
if Assigned(ADireccion) then
begin
FAlbaran.Edit;
try
if ADireccion.IDIsNull then // Se ha elegido la direcci<63>n de raz<61>n social
begin
FAlbaran.ClearField('ID_DIRECCION');
FAlbaran.ClearField('IMPORTE_PORTE');
end
else begin
FAlbaran.ID_DIRECCION := ADireccion.ID;
FAlbaran.IMPORTE_PORTE := ADireccion.PORTE;
end;
with FAlbaran do
begin
CALLE := ADireccion.CALLE;
POBLACION := ADireccion.POBLACION;
CODIGO_POSTAL := ADireccion.CODIGO_POSTAL;
PROVINCIA := ADireccion.PROVINCIA;
PERSONA_CONTACTO := ADireccion.PERSONA_CONTACTO;
TELEFONO := ADireccion.TELEFONO;
MOVIL := ADireccion.MOVIL;
end;
finally
FAlbaran.Post;
end;
end;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.EscribirTextoDireccion;
var
ACadena : String;
begin
ACadena := '';
if Assigned(FAlbaran) then
ACadena := Format('%s %s %s %s',
[FAlbaran.CALLE, FAlbaran.POBLACION,
FAlbaran.CODIGO_POSTAL, FAlbaran.PROVINCIA]);
edtDireccion.Text := ACadena;
end;
function TfrViewDatosYSeleccionClienteAlbaran.GetCliente: IBizCliente;
begin
Result := FCliente;
end;
function TfrViewDatosYSeleccionClienteAlbaran.GetID_Cliente: integer;
begin
Result := -1;
if Assigned(FCliente) then
Result := FCliente.ID;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.SetCliente(Value: IBizCliente);
var
ADireccion : IBizDireccionesContacto;
begin
ADireccion := NIL;
FCliente := Value;
if Assigned(FCliente) then
begin
dsCliente.DataTable := FCliente.DataTable;
if not FCliente.DataTable.Active then
FCliente.DataTable.Active := True;
ElegirDireccionParaAlbaran;
EscribirTextoDireccion;
EscribirTextoTelefonos;
end
else begin
dsCliente.DataTable := NIL;
FCliente := NIL;
end;
if Assigned(FOnClienteChanged) then
FOnClienteChanged(Self);
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.SetID_Cliente(const Value: integer);
begin
Self.Cliente := IBizCliente(FClientesController.Buscar(Value));
end;
function TfrViewDatosYSeleccionClienteAlbaran.GetOnClienteChanged: TNotifyEvent;
begin
Result := FOnClienteChanged;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.RefrescarDireccion;
begin
EscribirTextoDireccion;
EscribirTextoTelefonos;
end;
function TfrViewDatosYSeleccionClienteAlbaran.GetAlbaran: IBizAlbaranCliente;
begin
Result := FAlbaran;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.EscribirTextoTelefonos;
var
ACadena : String;
begin
ACadena := '';
if not FAlbaran.TELEFONOIsNull then
ACadena := FAlbaran.TELEFONO;
if not FAlbaran.MOVILIsNull then
begin
if ACadena <> '' then
ACadena := ACadena + ' / ';
ACadena := ACadena + FAlbaran.MOVIL;
end;
edtTelefonos.Text := ACadena;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.SetOnClienteChanged(
const Value: TNotifyEvent);
begin
FOnClienteChanged := Value;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.SetAlbaran(
const Value: IBizAlbaranCliente);
begin
FAlbaran := Value;
if Assigned(FAlbaran) then
begin
dsAlbaran.DataTable := FAlbaran.DataTable;
FCliente := FAlbaran.Cliente;
dsCliente.DataTable := FCliente.DataTable;
if not FCliente.DataTable.Active then
FCliente.DataTable.Active := True;
// <20>Hay cliente en el albaran?
if FCliente.ID > 0 then
RefrescarDireccion
else begin
edtDireccion.Lines.Clear;
edtTelefonos.Text := '';
end;
end
else begin
dsAlbaran.DataTable := NIL;
FCliente := NIL;
end;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.SetReadOnly(Value: Boolean);
begin
inherited;
if (csLoading in Self.ComponentState) then
Exit;
actAnadirContacto.Enabled := not ReadOnly;
actElegirContacto.Enabled := not ReadOnly;
end;
procedure TfrViewDatosYSeleccionClienteAlbaran.VerFichaCliente;
var
ACliente : IBizCliente;
begin
if not Assigned(Cliente) then
ShowErrorMessage('No se ha indicado un cliente', 'El albar<61>n no tiene ning<6E>n cliente asociado a mostrar.')
else begin
FClientesController.Ver(Cliente);
ACliente := (FClientesController.Buscar(Cliente.ID) as IBizCliente);
if Assigned(ACliente) then
Self.Cliente := ACliente;
ACliente := Nil;
end;
end;
end.