unit uViewDatosYSeleccionProveedorAlbaran; 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, uBizAlbaranesProveedor, uBizDireccionesContacto, uDireccionesContactoController, Menus, cxLookAndFeelPainters, cxButtons; type IViewDatosYSeleccionProveedorAlbaran = interface(IViewBase) ['{F1E1FFC0-02C9-47F5-92BC-BE10FA2C5134}'] function GetAlbaran: IBizAlbaranProveedor; procedure SetAlbaran(const Value: IBizAlbaranProveedor); property Albaran: IBizAlbaranProveedor read GetAlbaran write SetAlbaran; 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; TfrViewDatosYSeleccionProveedorAlbaran = class(TfrViewBase, IViewDatosYSeleccionProveedorAlbaran) dsProveedor: TDADataSource; ActionList1: TActionList; actElegirContacto: TAction; actAnadirContacto: TAction; actVerContacto: TAction; dxLayoutControl1Group_Root: TdxLayoutGroup; dxLayoutControl1: TdxLayoutControl; dxLayoutControl1Item1: TdxLayoutItem; edtlNombre: TcxDBTextEdit; dxLayoutControl1Item2: TdxLayoutItem; edtNIFCIF: TcxDBTextEdit; dsAlbaran: TDADataSource; actElegirDireccion: TAction; actElegirPersonaContacto: TAction; dxLayoutControl1Item3: TdxLayoutItem; edtPersonaContacto: TcxDBTextEdit; dxLayoutControl1Group4: TdxLayoutGroup; dxLayoutControl1Item4: TdxLayoutItem; edtDireccion: TcxTextEdit; 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; FAlbaran : IBizAlbaranProveedor; 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 GetAlbaran: IBizAlbaranProveedor; procedure SetAlbaran(const Value: IBizAlbaranProveedor); procedure EscribirTextoDireccion; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure ElegirPersonaContacto; procedure ElegirDireccionProveedor; procedure ElegirProveedor; procedure VerFichaProveedor; procedure AnadirNuevoProveedor; procedure RefrescarDireccion; property Albaran: IBizAlbaranProveedor read GetAlbaran write SetAlbaran; 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 TfrViewDatosYSeleccionProveedorAlbaran.actElegirContactoExecute(Sender: TObject); begin ElegirProveedor; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.actElegirDireccionExecute( Sender: TObject); begin inherited; ElegirDireccionProveedor; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.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 TfrViewDatosYSeleccionProveedorAlbaran.actElegirPersonaContactoExecute( Sender: TObject); begin inherited; ElegirPersonaContacto; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.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 TfrViewDatosYSeleccionProveedorAlbaran.actAnadirContactoExecute( Sender: TObject); begin AnadirNuevoProveedor; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.actVerContactoExecute( Sender: TObject); begin inherited; VerFichaProveedor; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.actVerContactoUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (Length(edtlNombre.Text) > 0); end; procedure TfrViewDatosYSeleccionProveedorAlbaran.AnadirNuevoProveedor; var AProveedor : IBizProveedor; begin inherited; AProveedor := (FProveedoresController.Nuevo as IBizProveedor); FProveedoresController.Ver(AProveedor); Self.Proveedor := AProveedor; end; constructor TfrViewDatosYSeleccionProveedorAlbaran.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; edtNIFCIF.Enabled := False; edtDireccion.Enabled := False; edtPersonaContacto.Enabled := False; end; destructor TfrViewDatosYSeleccionProveedorAlbaran.Destroy; begin FProveedoresController := NIL; FDireccionesController := NIL; inherited; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.edtDireccionPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin inherited; ElegirDireccionProveedor; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.edtPersonaContactoPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin inherited; ElegirPersonaContacto; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.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 TfrViewDatosYSeleccionProveedorAlbaran.ElegirDireccionProveedor; var ADireccion : IBizDireccionesContacto; begin inherited; ADireccion := FProveedoresController.ElegirDireccionEntrega(FProveedor, ' '); if Assigned(ADireccion) then begin FDireccion := ADireccion; FAlbaran.Edit; if FDireccion.IDIsNull then begin FAlbaran.ClearField('ID_DIRECCION'); FAlbaran.ClearField('IMPORTE_PORTE'); end else begin FAlbaran.ID_DIRECCION := FDireccion.ID; FAlbaran.IMPORTE_PORTE := FDireccion.PORTE; end; FAlbaran.PERSONA_CONTACTO_PROV := FDireccion.PERSONA_CONTACTO; EscribirTextoDireccion; end; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.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 FAlbaran.Edit; FAlbaran.PERSONA_CONTACTO_PROV := APersona.NOMBRE; end; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.EscribirTextoDireccion; var ACadena : String; begin ACadena := ''; if Assigned(FDireccion) then ACadena := Format('%s %s %s %s', [FDireccion.CALLE, FDireccion.POBLACION, FDireccion.CODIGO_POSTAL, FDireccion.PROVINCIA]); edtDireccion.Text := ACadena; end; function TfrViewDatosYSeleccionProveedorAlbaran.GetProveedor: IBizProveedor; begin Result := FProveedor; end; function TfrViewDatosYSeleccionProveedorAlbaran.GetID_Proveedor: integer; begin Result := -1; if Assigned(FProveedor) then Result := FProveedor.ID; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.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 FAlbaran.Edit; FAlbaran.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 TfrViewDatosYSeleccionProveedorAlbaran.SetID_Proveedor(const Value: integer); begin Self.Proveedor := IBizProveedor(FProveedoresController.Buscar(Value)); end; function TfrViewDatosYSeleccionProveedorAlbaran.GetOnProveedorChanged: TNotifyEvent; begin Result := FOnProveedorChanged; end; function TfrViewDatosYSeleccionProveedorAlbaran.GetAlbaran: IBizAlbaranProveedor; begin Result := FAlbaran; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.RefrescarDireccion; begin FDireccion := FDireccionesController.Nuevo; if (not FAlbaran.ID_DIRECCIONIsNull) and (FDireccionesController.Localizar(FProveedor.Direcciones, FAlbaran.ID_DIRECCION)) then FDireccionesController.CopiarDireccion(FProveedor.Direcciones, FDireccion) else FDireccionesController.CopiarDireccionFiscal(FProveedor, FDireccion); EscribirTextoDireccion; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.SetOnProveedorChanged( const Value: TNotifyEvent); begin FOnProveedorChanged := Value; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.SetAlbaran( const Value: IBizAlbaranProveedor); begin FAlbaran := Value; if Assigned(FAlbaran) then begin dsAlbaran.DataTable := FAlbaran.DataTable; FProveedor := FAlbaran.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 dsAlbaran.DataTable := NIL; FProveedor := NIL; FDireccion := NIL; end; end; procedure TfrViewDatosYSeleccionProveedorAlbaran.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 TfrViewDatosYSeleccionProveedorAlbaran.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.