FactuGES2/Source/Modulos/Contratos de cliente/Views/uViewDatosYSeleccionClienteContrato.pas

452 lines
14 KiB
ObjectPascal
Raw 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 ElegirPersonaContacto;
procedure ElegirDireccionCliente;
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;
Button1: TBitBtn;
dxLayoutControl1Item7: TdxLayoutItem;
Button2: TBitBtn;
dxLayoutControl1Item8: TdxLayoutItem;
Button3: TBitBtn;
dxLayoutControl1Item9: TdxLayoutItem;
dxLayoutControl1Group1: TdxLayoutGroup;
dxLayoutControl1Group2: TdxLayoutGroup;
dsContrato: 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;
FContrato : IBizContratoCliente;
FCliente : IBizCliente;
FDireccion : 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 GetContrato: IBizContratoCliente;
procedure SetContrato(const Value: IBizContratoCliente);
procedure EscribirTextoDireccion;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ElegirPersonaContacto;
procedure ElegirDireccionCliente;
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, uBizContactosPersonal, uDialogUtils;
procedure TfrViewDatosYSeleccionClienteContrato.actElegirContactoExecute(Sender: TObject);
begin
ElegirCliente;
end;
procedure TfrViewDatosYSeleccionClienteContrato.actElegirDireccionExecute(
Sender: TObject);
begin
inherited;
ElegirDireccionCliente;
end;
procedure TfrViewDatosYSeleccionClienteContrato.actElegirDireccionUpdate(
Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := Assigned(FCliente.Direcciones) and
(FCliente.Direcciones.Active) and (FCliente.Direcciones.RecordCount > 0);
end;
procedure TfrViewDatosYSeleccionClienteContrato.actElegirPersonaContactoExecute(
Sender: TObject);
begin
inherited;
ElegirPersonaContacto;
end;
procedure TfrViewDatosYSeleccionClienteContrato.actElegirPersonaContactoUpdate(
Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := Assigned(FCliente.Personal) and
(FCliente.Personal.Active) and (FCliente.Personal.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;
FDireccion := FDireccionesController.Nuevo;
edtlNombre.Enabled := False;
edtNIFCIF.Enabled := False;
edtDireccion.Enabled := False;
edtPersonaContacto.Enabled := False;
Button5.Visible := False;
end;
destructor TfrViewDatosYSeleccionClienteContrato.Destroy;
begin
FDireccion := NIL;
FClientesController := NIL;
FDireccionesController := NIL;
inherited;
end;
procedure TfrViewDatosYSeleccionClienteContrato.edtDireccionPropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
begin
inherited;
ElegirDireccionCliente;
end;
procedure TfrViewDatosYSeleccionClienteContrato.edtPersonaContactoPropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
begin
inherited;
ElegirPersonaContacto;
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.ElegirDireccionCliente;
var
ADireccion : IBizDireccionesContacto;
begin
inherited;
ADireccion := FClientesController.ElegirDireccionEntrega(FCliente, ' ');
if Assigned(ADireccion) then
begin
FDireccion := ADireccion;
EscribirTextoDireccion;
if FDireccion.IDIsNull then
begin
// FContrato.ClearField('ID_DIRECCION');
FContrato.ClearField('IMPORTE_PORTE');
end
else begin
// FContrato.ID_DIRECCION := FDireccion.ID;
FContrato.IMPORTE_PORTE := FDireccion.PORTE;
end;
end;
end;
procedure TfrViewDatosYSeleccionClienteContrato.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
FContrato.Edit;
FContrato.PERSONA_CONTACTO := APersona.NOMBRE;
end;
end;
procedure TfrViewDatosYSeleccionClienteContrato.EscribirTextoDireccion;
var
ACadena : String;
begin
ACadena := '';
//Siempre asignaremos la direccion y persona de contacto ya sea de las direcciones del contacto o la ID_Direccion=0 que es la principal de la ficha
FContrato.Edit;
FContrato.CALLE := FDireccion.CALLE;
FContrato.POBLACION := FDireccion.POBLACION;
FContrato.PROVINCIA := FDireccion.PROVINCIA;
FContrato.CODIGO_POSTAL := FDireccion.CODIGO_POSTAL;
FContrato.PERSONA_CONTACTO := FDireccion.PERSONA_CONTACTO;
if Assigned(FDireccion) then
ACadena := Format('%s %s %s %s',
[FDireccion.CALLE, FDireccion.POBLACION,
FDireccion.CODIGO_POSTAL, FDireccion.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);
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
if FCliente.ID > 0 then
edtPersonaContacto.Enabled := True;
if FCliente.Direcciones.RecordCount > 0 then
ElegirDireccionCliente
else begin
FDireccionesController.CopiarDireccionFiscal(FCliente, FDireccion);
EscribirTextoDireccion;
end;
end
else begin
dsCliente.DataTable := NIL;
FCliente := NIL;
FDireccion := NIL;
edtPersonaContacto.Enabled := False;
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;
function TfrViewDatosYSeleccionClienteContrato.GetContrato: IBizContratoCliente;
begin
Result := FContrato;
end;
procedure TfrViewDatosYSeleccionClienteContrato.RefrescarDireccion;
begin
// FDireccion := FDireccionesController.Nuevo;
// if (not FContrato.ID_DIRECCIONIsNull) and
// (FDireccionesController.Localizar(FCliente.Direcciones, FContrato.ID_DIRECCION)) then
// FDireccionesController.CopiarDireccion(FCliente.Direcciones, FDireccion)
// else
// FDireccionesController.CopiarDireccionFiscal(FCliente, FDireccion);
// EscribirTextoDireccion;
FDireccion.Active := True;
FDireccion.DataTable.Insert;
try
with FDireccion do
begin
NOMBRE := FContrato.NOMBRE;
CALLE := FContrato.CALLE;
POBLACION := FContrato.POBLACION;
PROVINCIA := FContrato.PROVINCIA;
CODIGO_POSTAL := FContrato.CODIGO_POSTAL;
PERSONA_CONTACTO := FContrato.PERSONA_CONTACTO;
end;
finally
FDireccion.DataTable.Post;
end;
EscribirTextoDireccion;
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;
//Solo podremos establecer persona de contacto si se ha asignado un cliente
if FCliente.ID > 0 then
edtPersonaContacto.Enabled := True;
RefrescarDireccion;
end
else begin
dsContrato.DataTable := NIL;
FCliente := NIL;
FDireccion := 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;
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);
end;
end;
end.