unit uViewObraReserva; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uViewBase, uBizPedidosProveedor, cxGraphics, dxLayoutControl, cxMemo, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox, StdCtrls, cxControls, DB, uDADataTable, ActnList, uBizAlmacenes, uAlmacenesController, uPedidosProveedorController, Buttons, uDAInterfaces, uBizObras, uObrasController, cxButtonEdit, cxDBEdit, ExtCtrls, ImgList, PngImageList; type IViewDireccionEntregaPedidoProv = interface(IViewBase) ['{7467855C-066F-4A60-B88F-2837C8050B1E}'] function GetPedidoProveedor: IBizPedidoProveedor; procedure SetPedidoProveedor(const Value: IBizPedidoProveedor); property PedidoProveedor: IBizPedidoProveedor read GetPedidoProveedor write SetPedidoProveedor; end; TfrViewObraReserva = class(TfrViewBase, IViewDireccionEntregaPedidoProv) dxLayoutControl1: TdxLayoutControl; dxLayoutGroup1: TdxLayoutGroup; dsPedido: TDADataSource; Label1: TLabel; dxLayoutControl1Item1: TdxLayoutItem; dxLayoutControl1Item2: TdxLayoutItem; Button3: TBitBtn; PngImageList: TPngImageList; ActionList1: TActionList; actVerObra: TAction; cbObraReserva: TComboBox; dxLayoutControl1Item5: TdxLayoutItem; dxLayoutControl1Group1: TdxLayoutGroup; procedure actVerObraExecute(Sender: TObject); procedure actVerObraUpdate(Sender: TObject); procedure cbObraReservaChange(Sender: TObject); procedure CustomViewShow(Sender: TObject); protected FObrasController : IObrasController; FListaObras : TStringList; //FObras: IBizObra; FPedido : IBizPedidoProveedor; FController : IPedidosProveedorController; function GetPedidoProveedor: IBizPedidoProveedor; procedure SetPedidoProveedor(const Value: IBizPedidoProveedor); procedure CargarObra; procedure SalvarObra; procedure SetReadOnly(Value: Boolean); override; public property PedidoProveedor: IBizPedidoProveedor read GetPedidoProveedor write SetPedidoProveedor; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation {$R *.dfm} uses uEditorRegistryUtils, uCustomView, uEditorElegirPersonaContactoPedido, uStringsUtils; procedure TfrViewObraReserva.actVerObraExecute(Sender: TObject); var AObra : IBizObra; AID : Integer; begin inherited; AID := StrToInt(FListaObras.Values[FListaObras.Names[cbObraReserva.ItemIndex-1]]); AObra := FObrasController.Buscar(AID); if Assigned(AObra) then try FObrasController.Ver(AObra); finally AObra := NIL; end; end; procedure TfrViewObraReserva.actVerObraUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := Assigned(FListaObras) and (not EsCadenaVacia(cbObraReserva.Text)); end; procedure TfrViewObraReserva.CargarObra; var i : integer; begin cbObraReserva.ItemIndex := 0; if not FPedido.Active then FPedido.Open; if not FPedido.ID_OBRAIsNull then begin for i := 0 to FListaObras.Count - 1 do begin if IntToStr(FPedido.ID_OBRA) = FListaObras.Values[FListaObras.Names[i]] then begin cbObraReserva.ItemIndex := i + 1; Exit; end; end; end; end; procedure TfrViewObraReserva.cbObraReservaChange(Sender: TObject); begin inherited; SalvarObra; end; constructor TfrViewObraReserva.Create(AOwner: TComponent); var i: Integer; begin inherited; FController := TPedidosProveedorController.Create; FObrasController := TObrasController.Create; FListaObras := FObrasController.DarListaObras; cbObraReserva.Items.BeginUpdate; try cbObraReserva.Items.Add(''); // Para poder indicar sin obra for i := 0 to FListaObras.Count - 1 do cbObraReserva.Items.Add(FListaObras.Names[i]); finally cbObraReserva.Items.EndUpdate; end; end; procedure TfrViewObraReserva.CustomViewShow(Sender: TObject); begin inherited; cbObraReserva.Enabled := not Self.ReadOnly; end; destructor TfrViewObraReserva.Destroy; begin FObrasController := Nil; FController := NIL; FreeANDNIL(FListaObras); inherited; end; function TfrViewObraReserva.GetPedidoProveedor: IBizPedidoProveedor; begin Result := FPedido; end; procedure TfrViewObraReserva.SalvarObra; var AID : String; begin // En el item 0 no hay nada if (cbObraReserva.ItemIndex > 0) then begin AID := FListaObras.Values[FListaObras.Names[cbObraReserva.ItemIndex-1]]; FPedido.Edit; FPedido.ID_OBRA := StrToInt(AID); FPedido.NOMBRE_OBRA := FListaObras.Names[cbObraReserva.ItemIndex-1]; end else begin FPedido.Edit; FPedido.ClearField('ID_OBRA'); FPedido.ClearField('NOMBRE_OBRA'); end; end; procedure TfrViewObraReserva.SetPedidoProveedor( const Value: IBizPedidoProveedor); begin dsPedido.DataTable := nil; FPedido := Value; dsPedido.DataTable := FPedido.DataTable; CargarObra; end; procedure TfrViewObraReserva.SetReadOnly(Value: Boolean); begin inherited; if (csLoading in Self.ComponentState) then Exit; cbObraReserva.Enabled := not Self.ReadOnly; end; end.