unit uViewDatosYSeleccionProveedorPedido; 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, uProveedoresController, dxLayoutControl, Buttons, uDAInterfaces, cxMaskEdit, cxButtonEdit, uBizPedidosProveedor, uBizDireccionesContacto, uDireccionesContactoController, Menus, cxLookAndFeelPainters, cxButtons, cxMemo; type IViewDatosYSeleccionProveedorPedido = interface(IViewBase) ['{F1E1FFC0-02C9-47F5-92BC-BE10FA2C5134}'] function GetPedido: IBizPedidoProveedor; procedure SetPedido(const Value: IBizPedidoProveedor); property Pedido: IBizPedidoProveedor read GetPedido write SetPedido; function GetProveedor: IBizProveedor; procedure SetProveedor(Value: IBizProveedor); property Proveedor: IBizProveedor read GetProveedor write SetProveedor; function GetID_Proveedor: integer; procedure SetID_Proveedor(const Value: integer); property ID_Proveedor: integer read GetID_Proveedor write SetID_Proveedor; function GetOnProveedorChanged : TNotifyEvent; procedure SetOnProveedorChanged (const Value : TNotifyEvent); property OnProveedorChanged : TNotifyEvent read GetOnProveedorChanged write SetOnProveedorChanged; procedure ElegirPersonaContacto; procedure ElegirDireccionProveedor; procedure ElegirProveedor; procedure VerFichaProveedor; procedure AnadirNuevoProveedor; procedure RefrescarDireccion; end; TfrViewDatosYSeleccionProveedorPedido = class(TfrViewBase, IViewDatosYSeleccionProveedorPedido) dsProveedor: TDADataSource; ActionList1: TActionList; actElegirContacto: TAction; actAnadirContacto: TAction; actVerContacto: TAction; dxLayoutControl1Group_Root: TdxLayoutGroup; dxLayoutControl1: TdxLayoutControl; dxLayoutControl1Item1: TdxLayoutItem; edtlNombre: TcxDBTextEdit; dxLayoutControl1Item2: TdxLayoutItem; edtCODIGO_ASIGNADO: TcxDBTextEdit; dsPedido: 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; dxLayoutControl1Item9: TdxLayoutItem; Button3: TBitBtn; dxLayoutControl1Group2: TdxLayoutGroup; dxLayoutControl1Item7: TdxLayoutItem; Button1: TBitBtn; dxLayoutControl1Item10: TdxLayoutItem; BitBtn1: TBitBtn; dxLayoutControl1Group1: TdxLayoutGroup; PngImageList: TPngImageList; 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 FOnProveedorChanged : TNotifyEvent; FMsgElegirProveedor: String; protected FProveedoresController : IProveedoresController; FDireccionesController : IDireccionesContactoController; FPedido : IBizPedidoProveedor; FProveedor : IBizProveedor; FDireccion : IBizDireccionesContacto; function GetProveedor: IBizProveedor; virtual; procedure SetProveedor(Value: IBizProveedor); virtual; function GetOnProveedorChanged : TNotifyEvent; procedure SetOnProveedorChanged (const Value : TNotifyEvent); procedure SetReadOnly(Value: Boolean); override; function GetID_Proveedor: integer; virtual; procedure SetID_Proveedor(const Value: integer); virtual; function GetPedido: IBizPedidoProveedor; procedure SetPedido(const Value: IBizPedidoProveedor); procedure EscribirTextoDireccion; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure ElegirPersonaContacto; procedure ElegirDireccionProveedor; procedure ElegirProveedor; procedure VerFichaProveedor; procedure AnadirNuevoProveedor; procedure RefrescarDireccion; property Pedido: IBizPedidoProveedor read GetPedido write SetPedido; property Proveedor: IBizProveedor read GetProveedor write SetProveedor; property OnProveedorChanged : TNotifyEvent read GetOnProveedorChanged write SetOnProveedorChanged; property ID_Proveedor: integer read GetID_Proveedor write SetID_Proveedor; end; implementation {$R *.dfm} uses uDataModuleProveedores, Math, uCustomView, uBizContactosPersonal, uDialogUtils; procedure TfrViewDatosYSeleccionProveedorPedido.actElegirContactoExecute(Sender: TObject); begin ElegirProveedor; end; procedure TfrViewDatosYSeleccionProveedorPedido.actElegirDireccionExecute( Sender: TObject); begin inherited; ElegirDireccionProveedor; end; procedure TfrViewDatosYSeleccionProveedorPedido.actElegirDireccionUpdate( Sender: TObject); begin inherited; (Sender as TAction).Enabled := not ReadOnly and Assigned(FProveedor.Direcciones) and (FProveedor.Direcciones.Active) and (FProveedor.Direcciones.RecordCount > 0); end; procedure TfrViewDatosYSeleccionProveedorPedido.actElegirPersonaContactoExecute( Sender: TObject); begin inherited; ElegirPersonaContacto; end; procedure TfrViewDatosYSeleccionProveedorPedido.actElegirPersonaContactoUpdate( Sender: TObject); begin inherited; (Sender as TAction).Enabled := not ReadOnly and Assigned(FProveedor.Personal) and (FProveedor.Personal.Active) and (FProveedor.Personal.RecordCount > 0); end; procedure TfrViewDatosYSeleccionProveedorPedido.actAnadirContactoExecute( Sender: TObject); begin AnadirNuevoProveedor; end; procedure TfrViewDatosYSeleccionProveedorPedido.actVerContactoExecute( Sender: TObject); begin inherited; VerFichaProveedor; end; procedure TfrViewDatosYSeleccionProveedorPedido.actVerContactoUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (Length(edtlNombre.Text) > 0); end; procedure TfrViewDatosYSeleccionProveedorPedido.AnadirNuevoProveedor; var AProveedor : IBizProveedor; begin inherited; AProveedor := (FProveedoresController.Nuevo as IBizProveedor); FProveedoresController.Ver(AProveedor); Self.Proveedor := AProveedor; end; constructor TfrViewDatosYSeleccionProveedorPedido.Create(AOwner: TComponent); begin inherited; FMsgElegirProveedor := 'Elija el proveedor al que se le realizará el pedido.'; FProveedoresController := TProveedoresController.Create; FDireccionesController := TDireccionesContactoController.Create; edtlNombre.Enabled := False; edtCODIGO_ASIGNADO.Enabled := False; edtDireccion.Enabled := False; edtPersonaContacto.Enabled := False; end; destructor TfrViewDatosYSeleccionProveedorPedido.Destroy; begin FProveedoresController := NIL; FDireccionesController := NIL; inherited; end; procedure TfrViewDatosYSeleccionProveedorPedido.edtDireccionPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin inherited; ElegirDireccionProveedor; end; procedure TfrViewDatosYSeleccionProveedorPedido.edtPersonaContactoPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin inherited; ElegirPersonaContacto; end; procedure TfrViewDatosYSeleccionProveedorPedido.ElegirProveedor; var AProveedor : IBizProveedor; begin inherited; AProveedor := (FProveedoresController.ElegirContacto(FProveedoresController.BuscarTodos, FMsgElegirProveedor, False) as IBizProveedor); if Assigned(AProveedor) then Self.Proveedor := AProveedor; AProveedor := Nil; end; procedure TfrViewDatosYSeleccionProveedorPedido.ElegirDireccionProveedor; var ADireccion : IBizDireccionesContacto; begin inherited; ADireccion := FProveedoresController.ElegirDireccionEntrega(FProveedor, ' '); if Assigned(ADireccion) then begin FDireccion := ADireccion; FPedido.Edit; if FDireccion.IDIsNull then begin FPedido.ClearField('ID_DIRECCION'); FPedido.ClearField('IMPORTE_PORTE'); end else begin FPedido.ID_DIRECCION := FDireccion.ID; FPedido.IMPORTE_PORTE := FDireccion.PORTE; end; FPedido.PERSONA_CONTACTO_PROV := FDireccion.PERSONA_CONTACTO; EscribirTextoDireccion; end; end; procedure TfrViewDatosYSeleccionProveedorPedido.ElegirPersonaContacto; var APersona : IBizContactoPersonal; begin inherited; APersona := FProveedoresController.ElegirPersonaContacto(FProveedor.Personal, 'El proveedor dispone de personas de contacto dadas de alta en su ficha. Seleccione la que quiere utilizar.'); if Assigned(APersona) then begin FPedido.Edit; FPedido.PERSONA_CONTACTO_PROV := APersona.NOMBRE; end; end; procedure TfrViewDatosYSeleccionProveedorPedido.EscribirTextoDireccion; var ACadena : String; begin ACadena := ''; if Assigned(FDireccion) then begin ACadena := Format('%s %s %s %s', [FDireccion.CALLE, FDireccion.POBLACION, FDireccion.CODIGO_POSTAL, FDireccion.PROVINCIA]); if not FDireccion.FAXIsNull then ACadena := ACadena + #13#10 + 'Fax: ' + FDireccion.FAX; end; edtDireccion.Text := ACadena; end; function TfrViewDatosYSeleccionProveedorPedido.GetProveedor: IBizProveedor; begin Result := FProveedor; end; function TfrViewDatosYSeleccionProveedorPedido.GetID_Proveedor: integer; begin Result := -1; if Assigned(FProveedor) then Result := FProveedor.ID; end; procedure TfrViewDatosYSeleccionProveedorPedido.SetProveedor(Value: IBizProveedor); begin FProveedor := Value; if Assigned(FProveedor) then begin dsProveedor.DataTable := FProveedor.DataTable; if not FProveedor.DataTable.Active then FProveedor.DataTable.Active := True; //Solo podremos establecer persona de contacto si se ha asignado un proveedor if FProveedor.ID > 0 then edtPersonaContacto.Enabled := True; if FProveedor.Direcciones.RecordCount > 0 then ElegirDireccionProveedor else begin FPedido.Edit; FPedido.PERSONA_CONTACTO_PROV := FProveedor.PERSONA_CONTACTO; RefrescarDireccion; end; end else begin dsProveedor.DataTable := NIL; FProveedor := NIL; FDireccion := NIL; edtPersonaContacto.Enabled := False; end; if Assigned(FOnProveedorChanged) then FOnProveedorChanged(Self); end; procedure TfrViewDatosYSeleccionProveedorPedido.SetID_Proveedor(const Value: integer); begin Self.Proveedor := IBizProveedor(FProveedoresController.Buscar(Value)); end; function TfrViewDatosYSeleccionProveedorPedido.GetOnProveedorChanged: TNotifyEvent; begin Result := FOnProveedorChanged; end; function TfrViewDatosYSeleccionProveedorPedido.GetPedido: IBizPedidoProveedor; begin Result := FPedido; end; procedure TfrViewDatosYSeleccionProveedorPedido.RefrescarDireccion; begin FDireccion := FDireccionesController.Nuevo; if (not FPedido.ID_DIRECCIONIsNull) and (FDireccionesController.Localizar(FProveedor.Direcciones, FPedido.ID_DIRECCION)) then FDireccionesController.CopiarDireccion(FProveedor.Direcciones, FDireccion) else FDireccionesController.CopiarDireccionFiscal(FProveedor, FDireccion); EscribirTextoDireccion; end; procedure TfrViewDatosYSeleccionProveedorPedido.SetOnProveedorChanged( const Value: TNotifyEvent); begin FOnProveedorChanged := Value; end; procedure TfrViewDatosYSeleccionProveedorPedido.SetPedido( const Value: IBizPedidoProveedor); begin FPedido := Value; if Assigned(FPedido) then begin dsPedido.DataTable := FPedido.DataTable; FProveedor := FPedido.Proveedor; dsProveedor.DataTable := FProveedor.DataTable; if not FProveedor.DataTable.Active then FProveedor.DataTable.Active := True; //Solo podremos establecer persona de contacto si se ha asignado un proveedor if FProveedor.ID > 0 then edtPersonaContacto.Enabled := True; RefrescarDireccion; end else begin dsPedido.DataTable := NIL; FProveedor := NIL; FDireccion := NIL; end; end; procedure TfrViewDatosYSeleccionProveedorPedido.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 TfrViewDatosYSeleccionProveedorPedido.VerFichaProveedor; begin if not Assigned(Proveedor) then ShowErrorMessage('No se ha indicado un proveedor', 'El pedido no tiene ningún proveedor asociado a mostrar.') else begin FProveedoresController.Ver(Proveedor); end; end; end.