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

424 lines
13 KiB
ObjectPascal
Raw Permalink Blame History

unit uViewDatosYSeleccionClienteContrato;
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, uBizContratosCliente, uBizDireccionesContacto,
uDireccionesContactoController, Menus, cxLookAndFeelPainters, cxButtons,
cxMemo;
type
IViewDatosYSeleccionClienteContrato = interface(IViewBase)
['{18A4627C-9E15-404A-ACAC-6A41D729F89B}']
function GetContrato: IBizContratoCliente;
procedure SetContrato(const Value: IBizContratoCliente);
property Contrato: IBizContratoCliente read GetContrato write SetContrato;
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 ElegirDireccionParaContrato;
procedure ElegirCliente;
procedure VerFichaCliente;
procedure AnadirNuevoCliente;
procedure RefrescarDireccion;
end;
TfrViewDatosYSeleccionClienteContrato = class(TfrViewBase, IViewDatosYSeleccionClienteContrato)
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;
dsContrato: TDADataSource;
actElegirDireccion: TAction;
dxLayoutControl1Item4: TdxLayoutItem;
edtDireccion: TcxMemo;
bElegirDireccion: TButton;
dxLayoutControl1Item5: TdxLayoutItem;
dxLayoutControl1Item10: TdxLayoutItem;
edtTelefonos: TcxTextEdit;
dxLayoutControl1Item11: TdxLayoutItem;
edtReferencia: TcxDBTextEdit;
dxLayoutControl1Group6: TdxLayoutGroup;
dxLayoutControl1Group7: 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;
FContrato : IBizContratoCliente;
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 GetContrato: IBizContratoCliente;
procedure SetContrato(const Value: IBizContratoCliente);
procedure EscribirTextoDireccion;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ElegirDireccionParaContrato;
procedure ElegirCliente;
procedure VerFichaCliente;
procedure AnadirNuevoCliente;
procedure RefrescarDireccion;
property Contrato: IBizContratoCliente read GetContrato write SetContrato;
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 TfrViewDatosYSeleccionClienteContrato.actElegirContactoExecute(Sender: TObject);
begin
ElegirCliente;
end;
procedure TfrViewDatosYSeleccionClienteContrato.actElegirDireccionExecute(
Sender: TObject);
begin
inherited;
ElegirDireccionParaContrato;
RefrescarDireccion;
end;
procedure TfrViewDatosYSeleccionClienteContrato.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 TfrViewDatosYSeleccionClienteContrato.actAnadirContactoExecute(
Sender: TObject);
begin
AnadirNuevoCliente;
end;
procedure TfrViewDatosYSeleccionClienteContrato.actVerContactoExecute(
Sender: TObject);
begin
inherited;
VerFichaCliente;
end;
procedure TfrViewDatosYSeleccionClienteContrato.actVerContactoUpdate(Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := (Length(edtlNombre.Text) > 0);
end;
procedure TfrViewDatosYSeleccionClienteContrato.AnadirNuevoCliente;
var
ACliente : IBizCliente;
begin
inherited;
ACliente := (FClientesController.Nuevo as IBizCliente);
FClientesController.Ver(ACliente);
Self.Cliente := ACliente;
end;
constructor TfrViewDatosYSeleccionClienteContrato.Create(AOwner: TComponent);
begin
inherited;
FMsgElegirCliente := 'Elija el cliente al que se le realizar<61> el contrato.';
FClientesController := TClientesController.Create;
FDireccionesController := TDireccionesContactoController.Create;
edtlNombre.Enabled := False;
edtNIFCIF.Enabled := False;
edtDireccion.Enabled := False;
edtReferencia.Enabled := False;
edtTelefonos.Enabled := False;
end;
destructor TfrViewDatosYSeleccionClienteContrato.Destroy;
begin
FClientesController := NIL;
FDireccionesController := NIL;
inherited;
end;
procedure TfrViewDatosYSeleccionClienteContrato.edtDireccionPropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
begin
inherited;
ElegirDireccionParaContrato;
end;
procedure TfrViewDatosYSeleccionClienteContrato.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 TfrViewDatosYSeleccionClienteContrato.ElegirDireccionParaContrato;
var
ADireccion : IBizDireccionesContacto;
begin
if FCliente.Direcciones.RecordCount > 0 then
ADireccion := FClientesController.ElegirDireccion(FCliente, 'Seleccione la direcci<63>n del cliente que quiere utilizar como direcci<63>n fiscal de este contrato.')
else begin
ADireccion := FDireccionesController.Nuevo;
FDireccionesController.CopiarDireccionFiscal(FCliente, ADireccion);
end;
if Assigned(ADireccion) then
begin
FContrato.Edit;
try
if ADireccion.IDIsNull then // Se ha elegido la direcci<63>n de raz<61>n social
begin
FContrato.ClearField('ID_DIRECCION');
FContrato.ClearField('IMPORTE_PORTE');
end
else begin
FContrato.ID_DIRECCION := ADireccion.ID;
FContrato.IMPORTE_PORTE := ADireccion.PORTE;
end;
with FContrato do
begin
NIF_CIF := ADireccion.NIF_CIF;
NOMBRE := ADireccion.NOMBRE;
NOMBRE_CLIENTE := ADireccion.NOMBRE;
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
FContrato.Post;
end;
end;
end;
procedure TfrViewDatosYSeleccionClienteContrato.EscribirTextoDireccion;
var
ACadena : String;
begin
ACadena := '';
if Assigned(FContrato) then
ACadena := Format('%s %s %s %s',
[FContrato.CALLE, FContrato.POBLACION,
FContrato.CODIGO_POSTAL, FContrato.PROVINCIA]);
edtDireccion.Text := ACadena;
end;
function TfrViewDatosYSeleccionClienteContrato.GetCliente: IBizCliente;
begin
Result := FCliente;
end;
function TfrViewDatosYSeleccionClienteContrato.GetID_Cliente: integer;
begin
Result := -1;
if Assigned(FCliente) then
Result := FCliente.ID;
end;
procedure TfrViewDatosYSeleccionClienteContrato.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;
ElegirDireccionParaContrato;
EscribirTextoDireccion;
EscribirTextoTelefonos;
end
else begin
dsCliente.DataTable := NIL;
FCliente := NIL;
end;
if Assigned(FOnClienteChanged) then
FOnClienteChanged(Self);
end;
procedure TfrViewDatosYSeleccionClienteContrato.SetID_Cliente(const Value: integer);
begin
Self.Cliente := IBizCliente(FClientesController.Buscar(Value));
end;
function TfrViewDatosYSeleccionClienteContrato.GetOnClienteChanged: TNotifyEvent;
begin
Result := FOnClienteChanged;
end;
procedure TfrViewDatosYSeleccionClienteContrato.RefrescarDireccion;
begin
EscribirTextoDireccion;
EscribirTextoTelefonos;
end;
function TfrViewDatosYSeleccionClienteContrato.GetContrato: IBizContratoCliente;
begin
Result := FContrato;
end;
procedure TfrViewDatosYSeleccionClienteContrato.EscribirTextoTelefonos;
var
ACadena : String;
begin
ACadena := '';
if not FContrato.TELEFONOIsNull then
ACadena := FContrato.TELEFONO;
if not FContrato.MOVILIsNull then
begin
if ACadena <> '' then
ACadena := ACadena + ' / ';
ACadena := ACadena + FContrato.MOVIL;
end;
edtTelefonos.Text := ACadena;
end;
procedure TfrViewDatosYSeleccionClienteContrato.SetOnClienteChanged(
const Value: TNotifyEvent);
begin
FOnClienteChanged := Value;
end;
procedure TfrViewDatosYSeleccionClienteContrato.SetContrato(
const Value: IBizContratoCliente);
begin
FContrato := Value;
if Assigned(FContrato) then
begin
dsContrato.DataTable := FContrato.DataTable;
FCliente := FContrato.Cliente;
dsCliente.DataTable := FCliente.DataTable;
if not FCliente.DataTable.Active then
FCliente.DataTable.Active := True;
// <20>Hay cliente en el contrato?
if FCliente.ID > 0 then
RefrescarDireccion
else begin
edtDireccion.Lines.Clear;
edtTelefonos.Text := '';
end;
end
else begin
dsContrato.DataTable := NIL;
FCliente := NIL;
end;
end;
procedure TfrViewDatosYSeleccionClienteContrato.SetReadOnly(Value: Boolean);
begin
inherited;
if (csLoading in Self.ComponentState) then
Exit;
actAnadirContacto.Enabled := not ReadOnly;
actElegirContacto.Enabled := not ReadOnly;
end;
procedure TfrViewDatosYSeleccionClienteContrato.VerFichaCliente;
var
ACliente : IBizCliente;
begin
if not Assigned(Cliente) then
ShowErrorMessage('No se ha indicado un cliente', 'El contrato no tiene ning<6E>n cliente asociado a mostrar.')
else begin
FClientesController.Ver(Cliente);
if (Application.MessageBox('<27>Desea recargar los datos del cliente en el documento?', 'Atenci<63>n', MB_YESNO) = IDYES) then
begin
ACliente := (FClientesController.Buscar(Cliente.ID) as IBizCliente);
if Assigned(ACliente) then
Self.Cliente := ACliente;
ACliente := Nil;
end;
end;
end;
end.