This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
LuisLeon_FactuGES2/Source/Modulos/Albaranes de proveedor/Views/uViewDatosYSeleccionClienteFinalAlbaran.pas
roberto ac3fa65c56 Version 4.2.9
Tareas #1160: En los albaranes de proveedor no funciona bien refrescar los datos del cliente cuando se ha cambiado su ficha
Tareas #1161: En un albarán de proveedor, si la dirección del cliente es muy larga, no salen todos los datos al imprimir
Tareas #1162: No sale el sumatorio de importe total en recibos de cliente (acordarse de ponerle a cristina el importe total)

Ojo tambien se incluye solución a recargar datos del contacto cuando da al botón ver y los modifica

git-svn-id: https://192.168.0.254/svn/Proyectos.LuisLeon_FactuGES2/trunk@181 b2cfbe5a-eba1-4a0c-8b32-7feea0a119f2
2013-02-28 16:51:21 +00:00

448 lines
14 KiB
ObjectPascal
Raw Blame History

unit uViewDatosYSeleccionClienteFinalAlbaran;
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, uBizAlbaranesProveedor, uBizDireccionesContacto,
uDireccionesContactoController, Menus, cxLookAndFeelPainters, cxButtons,
cxMemo;
type
IViewDatosYSeleccionClienteFinalAlbaran = interface(IViewBase)
['{45E273FC-D61A-4341-89E3-897781A4D7DA}']
function GetAlbaran: IBizAlbaranProveedor;
procedure SetAlbaran(const Value: IBizAlbaranProveedor);
property Albaran: IBizAlbaranProveedor 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 ElegirPersonaContacto;
procedure ElegirDireccionCliente;
procedure ElegirCliente;
procedure VerFichaCliente;
procedure AnadirNuevoCliente;
procedure RefrescarDireccion;
end;
TfrViewDatosYSeleccionClienteFinalAlbaran = class(TfrViewBase, IViewDatosYSeleccionClienteFinalAlbaran)
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;
Button1: TBitBtn;
dxLayoutControl1Item7: TdxLayoutItem;
Button2: TBitBtn;
dxLayoutControl1Item8: TdxLayoutItem;
Button3: TBitBtn;
dxLayoutControl1Item9: TdxLayoutItem;
dxLayoutControl1Group1: TdxLayoutGroup;
dxLayoutControl1Group2: TdxLayoutGroup;
dsAlbaran: 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;
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
FOnClienteChanged : TNotifyEvent;
FMsgElegirCliente: String;
protected
FClientesController : IClientesController;
FDireccionesController : IDireccionesContactoController;
FAlbaran : IBizAlbaranProveedor;
FCliente : IBizCliente;
FDireccionFinal : IBizDireccionesContacto;
FDireccionEntrega : IBizDireccionesContacto;
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: IBizAlbaranProveedor;
procedure SetAlbaran(const Value: IBizAlbaranProveedor);
procedure EscribirTextoDireccion;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ElegirPersonaContacto;
procedure ElegirDireccionCliente;
procedure ElegirCliente;
procedure VerFichaCliente;
procedure AnadirNuevoCliente;
procedure RefrescarDireccion;
property Albaran: IBizAlbaranProveedor 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, uBizContactosPersonal, uDialogUtils;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.actElegirContactoExecute(Sender: TObject);
begin
ElegirCliente;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.actElegirDireccionExecute(
Sender: TObject);
begin
inherited;
ElegirDireccionCliente;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.actElegirDireccionUpdate(
Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := Assigned(FCliente.Direcciones) and
(FCliente.Direcciones.Active) and (FCliente.Direcciones.RecordCount > 0);
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.actElegirPersonaContactoExecute(
Sender: TObject);
begin
inherited;
ElegirPersonaContacto;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.actElegirPersonaContactoUpdate(
Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := Assigned(FCliente.Personal) and
(FCliente.Personal.Active) and (FCliente.Personal.RecordCount > 0);
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.actAnadirContactoExecute(
Sender: TObject);
begin
AnadirNuevoCliente;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.actVerContactoExecute(
Sender: TObject);
begin
inherited;
VerFichaCliente;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.actVerContactoUpdate(Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := (Length(edtlNombre.Text) > 0);
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.AnadirNuevoCliente;
var
ACliente : IBizCliente;
begin
inherited;
ACliente := (FClientesController.Nuevo as IBizCliente);
FClientesController.Ver(ACliente);
Self.Cliente := ACliente;
end;
constructor TfrViewDatosYSeleccionClienteFinalAlbaran.Create(AOwner: TComponent);
begin
inherited;
FMsgElegirCliente := 'Elija el cliente al que se le realizar<61> el presupuesto.';
FClientesController := TClientesController.Create;
FDireccionesController := TDireccionesContactoController.Create;
edtlNombre.Enabled := False;
edtNIFCIF.Enabled := False;
edtDireccion.Enabled := False;
edtPersonaContacto.Enabled := False;
end;
destructor TfrViewDatosYSeleccionClienteFinalAlbaran.Destroy;
begin
FClientesController := NIL;
FDireccionesController := NIL;
inherited;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.edtDireccionPropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
begin
inherited;
ElegirDireccionCliente;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.edtPersonaContactoPropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
begin
inherited;
ElegirPersonaContacto;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.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 TfrViewDatosYSeleccionClienteFinalAlbaran.ElegirDireccionCliente;
var
ADireccion : IBizDireccionesContacto;
begin
inherited;
FDireccionesController.CopiarDireccionFiscal(FCliente, FDireccionFinal);
if (FCliente.Direcciones.RecordCount > 1) then
ADireccion := FClientesController.ElegirDireccionEntrega(FCliente, 'Seleccione la direcci<63>n del cliente que quiere utilizar como direcci<63>n de envio de este albaran.')
else
ADireccion := FCliente.Direcciones;
if Assigned(ADireccion) then
begin
FDireccionEntrega := ADireccion;
FAlbaran.Edit;
if FDireccionEntrega.IDIsNull then
begin
FAlbaran.ClearField('ID_DIRECCION');
FAlbaran.ClearField('IMPORTE_PORTE');
FAlbaran.ClearField('CALLE');
FAlbaran.ClearField('POBLACION');
FAlbaran.ClearField('PROVINCIA');
FAlbaran.ClearField('CODIGO_POSTAL');
FAlbaran.ClearField('TELEFONO');
FAlbaran.ClearField('PERSONA_CONTACTO');
end
else begin
FAlbaran.ID_DIRECCION := FDireccionEntrega.ID;
FAlbaran.CALLE := FDireccionEntrega.CALLE;
FAlbaran.POBLACION := FDireccionEntrega.POBLACION;
FAlbaran.PROVINCIA := FDireccionEntrega.PROVINCIA;
FAlbaran.CODIGO_POSTAL := FDireccionEntrega.CODIGO_POSTAL;
FAlbaran.TELEFONO := FDireccionEntrega.TELEFONO;
FAlbaran.PERSONA_CONTACTO := FDireccionEntrega.PERSONA_CONTACTO;
FAlbaran.IMPORTE_PORTE := FDireccionEntrega.PORTE;
end;
EscribirTextoDireccion;
end;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.ElegirPersonaContacto;
var
APersona : IBizContactoPersonal;
begin
inherited;
APersona := FClientesController.ElegirPersonaContacto(FCliente.Personal, 'El cliente dispone de personas de contacto dadas de alta en su ficha. Seleccione la que quiere utilizar.');
if Assigned(APersona) then
begin
FAlbaran.Edit;
FAlbaran.PERSONA_CONTACTO := APersona.NOMBRE;
end;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.EscribirTextoDireccion;
var
ACadena : String;
begin
ACadena := '';
if Assigned(FDireccionFinal) then
begin
ACadena := Format('%s %s %s %s',
[FDireccionFinal.CALLE, FDireccionFinal.POBLACION,
FDireccionFinal.CODIGO_POSTAL, FDireccionFinal.PROVINCIA]);
if (not FDireccionFinal.TELEFONOIsNull) and (FDireccionFinal.TELEFONO <> '') then
ACadena := ACadena + #13#10 + 'Tel<65>fono: ' + FDireccionFinal.TELEFONO;
if (not FDireccionFinal.FAXIsNull) and (FDireccionFinal.FAX <> '') then
ACadena := ACadena + #13#10 + 'Fax: ' + FDireccionFinal.FAX;
end;
edtDireccion.Text := ACadena;
end;
function TfrViewDatosYSeleccionClienteFinalAlbaran.GetCliente: IBizCliente;
begin
Result := FCliente;
end;
function TfrViewDatosYSeleccionClienteFinalAlbaran.GetID_Cliente: integer;
begin
Result := -1;
if Assigned(FCliente) then
Result := FCliente.ID;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.SetCliente(Value: IBizCliente);
begin
FCliente := Value;
if Assigned(FCliente) then
begin
dsCliente.DataTable := FCliente.DataTable;
if not FCliente.DataTable.Active then
FCliente.DataTable.Active := True;
//Solo podremos establecer persona de contacto si se ha asignado un cliente No se puede modificar el contacto nos viene de la ficha de cliente
// if FCliente.ID > 0 then
// edtPersonaContacto.Enabled := True;
ElegirDireccionCliente
end
else begin
dsCliente.DataTable := NIL;
FCliente := NIL;
FDireccionFinal := NIL;
edtPersonaContacto.Enabled := False;
end;
if Assigned(FOnClienteChanged) then
FOnClienteChanged(Self);
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.SetID_Cliente(const Value: integer);
begin
Self.Cliente := IBizCliente(FClientesController.Buscar(Value));
end;
function TfrViewDatosYSeleccionClienteFinalAlbaran.GetOnClienteChanged: TNotifyEvent;
begin
Result := FOnClienteChanged;
end;
function TfrViewDatosYSeleccionClienteFinalAlbaran.GetAlbaran: IBizAlbaranProveedor;
begin
Result := FAlbaran;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.RefrescarDireccion;
begin
FDireccionFinal := FDireccionesController.Nuevo;
if (not FAlbaran.ID_DIRECCIONIsNull) and
(FDireccionesController.Localizar(FCliente.Direcciones, FAlbaran.ID_DIRECCION)) then
FDireccionesController.CopiarDireccion(FCliente.Direcciones, FDireccionFinal)
else
FDireccionesController.CopiarDireccionFiscal(FCliente, FDireccionFinal);
EscribirTextoDireccion;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.SetOnClienteChanged(
const Value: TNotifyEvent);
begin
FOnClienteChanged := Value;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.SetAlbaran(const Value: IBizAlbaranProveedor);
begin
FAlbaran := Value;
if Assigned(FAlbaran) then
begin
dsAlbaran.DataTable := FAlbaran.DataTable;
FCliente := FAlbaran.ClienteFinal;
dsCliente.DataTable := FCliente.DataTable;
if not FCliente.DataTable.Active then
FCliente.DataTable.Active := True;
//Solo podremos establecer persona de contacto si se ha asignado un cliente
if FCliente.ID > 0 then
edtPersonaContacto.Enabled := True;
RefrescarDireccion;
end
else begin
dsAlbaran.DataTable := NIL;
FCliente := NIL;
FDireccionFinal := NIL;
end;
end;
procedure TfrViewDatosYSeleccionClienteFinalAlbaran.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 TfrViewDatosYSeleccionClienteFinalAlbaran.VerFichaCliente;
begin
if not Assigned(Cliente) then
ShowErrorMessage('No se ha indicado un cliente', 'El presupuesto no tiene ning<6E>n cliente asociado a mostrar.')
else begin
FClientesController.Ver(Cliente);
if (ShowConfirmMessage('<27>Desea recargar los datos del cliente?', '') = IDYES) then
Self.Cliente := Cliente;
end;
end;
end.