unit uViewDatosYSeleccionClienteFacturaProforma; 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, uBizFacturasProforma, uBizDireccionesContacto, uDireccionesContactoController, Menus, cxLookAndFeelPainters, cxButtons, cxMemo; type IViewDatosYSeleccionClienteFacturaProforma = interface(IViewBase) ['{B914EF6C-6E38-4850-A716-1214BDC128A4}'] function GetFactura: IBizFacturaProforma; procedure SetFactura(const Value: IBizFacturaProforma); property Factura: IBizFacturaProforma read GetFactura write SetFactura; function GetCliente: IBizCliente; procedure SetCliente(Value: IBizCliente); property Cliente: IBizCliente read GetCliente write SetCliente; function GetOnClienteChanged : TNotifyEvent; procedure SetOnClienteChanged (const Value : TNotifyEvent); property OnClienteChanged : TNotifyEvent read GetOnClienteChanged write SetOnClienteChanged; procedure ElegirDireccionCliente; procedure ElegirCliente; procedure VerFichaCliente; procedure AnadirNuevoCliente; procedure RefrescarDireccion; end; TfrViewDatosYSeleccionClienteFacturaProforma = class(TfrViewBase, IViewDatosYSeleccionClienteFacturaProforma) 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; dsFactura: TDADataSource; actElegirDireccion: TAction; dxLayoutControl1Group4: TdxLayoutGroup; Button4: TButton; dxLayoutControl1Item5: TdxLayoutItem; dxLayoutControl1Item3: TdxLayoutItem; edtDireccion: TcxMemo; 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); procedure actElegirPersonaContactoUpdate(Sender: TObject); private FOnClienteChanged : TNotifyEvent; FMsgElegirCliente: String; protected FClientesController : IClientesController; FDireccionesController : IDireccionesContactoController; FFactura : IBizFacturaProforma; 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 GetFactura: IBizFacturaProforma; procedure SetFactura(const Value: IBizFacturaProforma); procedure EscribirTextoDireccion; procedure CopiarDireccionAFactura; procedure LimpiarDireccionDeFactura; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure ElegirDireccionCliente; procedure ElegirCliente; procedure VerFichaCliente; procedure AnadirNuevoCliente; procedure RefrescarDireccion; property Factura: IBizFacturaProforma read GetFactura write SetFactura; 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 TfrViewDatosYSeleccionClienteFacturaProforma.actElegirContactoExecute(Sender: TObject); begin ElegirCliente; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.actElegirDireccionExecute( Sender: TObject); begin inherited; ElegirDireccionCliente; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.actElegirDireccionUpdate( Sender: TObject); begin inherited; (Sender as TAction).Enabled := Assigned(FCliente.Direcciones) and (FCliente.Direcciones.Active) and (FCliente.Direcciones.RecordCount > 0); end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.actElegirPersonaContactoUpdate( Sender: TObject); begin inherited; (Sender as TAction).Enabled := Assigned(FCliente.Personal) and (FCliente.Personal.Active) and (FCliente.Personal.RecordCount > 0); end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.actAnadirContactoExecute( Sender: TObject); begin AnadirNuevoCliente; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.actVerContactoExecute( Sender: TObject); begin inherited; VerFichaCliente; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.actVerContactoUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (Length(edtlNombre.Text) > 0); end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.AnadirNuevoCliente; var ACliente : IBizCliente; begin inherited; ACliente := (FClientesController.Nuevo as IBizCliente); FClientesController.Ver(ACliente); Self.Cliente := ACliente; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.CopiarDireccionAFactura; begin FFactura.Edit; FFactura.ID_DIRECCION := FDireccion.ID; FFactura.CALLE := FDireccion.CALLE; FFactura.POBLACION := FDireccion.POBLACION; FFactura.CODIGO_POSTAL := FDireccion.CODIGO_POSTAL; FFactura.PROVINCIA := FDireccion.PROVINCIA; FFactura.PAIS := FDireccion.PAIS; FFactura.IMPORTE_PORTE := FDireccion.PORTE; end; constructor TfrViewDatosYSeleccionClienteFacturaProforma.Create(AOwner: TComponent); begin inherited; FMsgElegirCliente := 'Elija el cliente al que se le realizará la factura.'; FClientesController := TClientesController.Create; FDireccionesController := TDireccionesContactoController.Create; edtlNombre.Enabled := False; edtNIFCIF.Enabled := False; edtDireccion.Enabled := False; end; destructor TfrViewDatosYSeleccionClienteFacturaProforma.Destroy; begin FClientesController := NIL; FDireccionesController := NIL; inherited; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.edtDireccionPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin inherited; ElegirDireccionCliente; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.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 TfrViewDatosYSeleccionClienteFacturaProforma.ElegirDireccionCliente; var ADireccion : IBizDireccionesContacto; begin inherited; FDireccionesController.CopiarDireccionFiscal(FCliente, FDireccion); if FDireccion.IDIsNull then LimpiarDireccionDeFactura else CopiarDireccionAFactura; EscribirTextoDireccion; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.EscribirTextoDireccion; var ACadena : String; begin ACadena := ''; if Assigned(FDireccion) then ACadena := Format('%s %s %s %s %s', [FFactura.CALLE, FFactura.POBLACION, FFactura.CODIGO_POSTAL, FFactura.PROVINCIA, FFACTURA.PAIS]); edtDireccion.Text := ACadena; end; function TfrViewDatosYSeleccionClienteFacturaProforma.GetCliente: IBizCliente; begin Result := FCliente; end; function TfrViewDatosYSeleccionClienteFacturaProforma.GetID_Cliente: integer; begin Result := -1; if Assigned(FCliente) then Result := FCliente.ID; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.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; if FCliente.Direcciones.RecordCount > 0 then ElegirDireccionCliente else RefrescarDireccion; end else begin dsCliente.DataTable := NIL; FCliente := NIL; FDireccion := NIL; end; if Assigned(FOnClienteChanged) then FOnClienteChanged(Self); end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.SetID_Cliente(const Value: integer); begin Self.Cliente := IBizCliente(FClientesController.Buscar(Value)); end; function TfrViewDatosYSeleccionClienteFacturaProforma.GetOnClienteChanged: TNotifyEvent; begin Result := FOnClienteChanged; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.LimpiarDireccionDeFactura; begin FFactura.Edit; FFactura.ClearField('ID_DIRECCION'); FFactura.ClearField('CALLE'); FFactura.ClearField('POBLACION'); FFactura.ClearField('CODIGO_POSTAL'); FFactura.ClearField('PROVINCIA'); FFactura.ClearField('PAIS'); FFactura.ClearField('IMPORTE_PORTE'); end; function TfrViewDatosYSeleccionClienteFacturaProforma.GetFactura: IBizFacturaProforma; begin Result := FFactura; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.RefrescarDireccion; begin FDireccion := FDireccionesController.Nuevo; if (not FFactura.ID_DIRECCIONIsNull) and (FDireccionesController.Localizar(FCliente.Direcciones, FFactura.ID_DIRECCION)) then FDireccionesController.CopiarDireccion(FCliente.Direcciones, FDireccion) else FDireccionesController.CopiarDireccionFiscal(FCliente, FDireccion); EscribirTextoDireccion; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.SetOnClienteChanged( const Value: TNotifyEvent); begin FOnClienteChanged := Value; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.SetFactura( const Value: IBizFacturaProforma); begin FFactura := Value; if Assigned(FFactura) then begin dsFactura.DataTable := FFactura.DataTable; FCliente := FFactura.Cliente; dsCliente.DataTable := FCliente.DataTable; if not FCliente.DataTable.Active then FCliente.DataTable.Active := True; RefrescarDireccion; end else begin dsFactura.DataTable := NIL; FCliente := NIL; FDireccion := NIL; end; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.SetReadOnly(Value: Boolean); begin inherited; if (csLoading in Self.ComponentState) then Exit; actAnadirContacto.Enabled := not ReadOnly; actElegirContacto.Enabled := not ReadOnly; end; procedure TfrViewDatosYSeleccionClienteFacturaProforma.VerFichaCliente; begin if not Assigned(Cliente) then ShowErrorMessage('No se ha indicado un cliente', 'La factura no tiene ningún cliente asociado a mostrar.') else begin FClientesController.Ver(Cliente); end; end; end.