unit uViewDetallesPedidoProveedor; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uViewDetallesArticulos, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, ImgList, PngImageList, uDADataTable, ActnList, ComCtrls, ToolWin, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, cxImageComboBox, cxTextEdit, cxMaskEdit, cxCheckBox, cxCurrencyEdit, Grids, DBGrids, StdCtrls, ExtCtrls, cxRichEdit, ExtActns, StdActns, JvExStdCtrls, JvCombobox, JvColorCombo, TB2Item, TBX, TB2Dock, TB2Toolbar, uArticulosController, uBizPedidosProveedor, uDAInterfaces, cxButtonEdit, cxDropDownEdit, Menus, cxGridCustomPopupMenu, cxGridPopupMenu, cxEditRepositoryItems; type IViewDetallesPedidoProveedor = interface(IViewDetallesArticulos) ['{4C82AADF-7FE2-47BC-88F1-2F2DA6DF0B57}'] function GetPedido: IBizPedidoProveedor; procedure SetPedido(const Value: IBizPedidoProveedor); property Pedido: IBizPedidoProveedor read GetPedido write SetPedido; end; TfrViewDetallesPedidoProveedor = class(TfrViewDetallesArticulos, IViewDetallesPedidoProveedor) TBXItem18: TTBXItem; Artculosdelcatlogo1: TMenuItem; N2: TMenuItem; procedure CustomViewCreate(Sender: TObject); procedure CustomViewDestroy(Sender: TObject); procedure OnValidateReferencia(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); override; procedure OnValidateReferenciaProveedor(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); virtual; protected FPedido: IBizPedidoProveedor; function GetPedido: IBizPedidoProveedor; procedure SetPedido(const Value: IBizPedidoProveedor); procedure AnadirArticulosInterno; override; procedure RellenarArticulosInterno; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; public property Pedido: IBizPedidoProveedor read GetPedido write SetPedido; end; implementation {$R *.dfm} uses uDetallesPedidoProveedorController; { TfrViewDetallesPedidoProveedor } procedure TfrViewDetallesPedidoProveedor.AnadirArticulosInterno; begin //No sé porque está en este módulo hecho así, supongo que por seguridad. if Assigned(Pedido) and Assigned(Pedido.Proveedor) then (Controller as IDetallesPedidoProveedorController).AnadirArticulos(Detalles, Pedido.Proveedor) else (Controller as IDetallesPedidoProveedorController).AnadirArticulos(Detalles); end; procedure TfrViewDetallesPedidoProveedor.CustomViewCreate(Sender: TObject); begin inherited; cxGridViewREFERENCIA.Properties.OnValidate := OnValidateReferencia; cxGridViewREFERENCIA_PROVEEDOR.Properties.OnValidate := OnValidateReferenciaProveedor; end; procedure TfrViewDetallesPedidoProveedor.CustomViewDestroy(Sender: TObject); begin FPedido := Nil; cxGridViewREFERENCIA.Properties.OnValidate := Nil; cxGridViewREFERENCIA_PROVEEDOR.Properties.OnValidate := Nil; inherited; end; procedure TfrViewDetallesPedidoProveedor.OnValidateReferencia( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); var lsReferencia : String; begin //En el caso de cadena vacia no validamos if (VarIsNull(DisplayValue)) then Exit; lsReferencia := VarToStr(DisplayValue); if (length(trim(lsReferencia)) = 0) then Exit; if not AnadirArticulo(lsReferencia, tReferenciaParaCompras) then begin ErrorText := 'La referencia introducida no exite en el catálogo del proveedor'; Error := True; end; end; procedure TfrViewDetallesPedidoProveedor.OnValidateReferenciaProveedor( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); var lsReferencia : String; begin //En el caso de cadena vacia no validamos if (VarIsNull(DisplayValue)) then Exit; lsReferencia := VarToStr(DisplayValue); if (length(trim(lsReferencia)) = 0) then Exit; if not AnadirArticulo(lsReferencia, tRefProveedorParaCompras) then begin ErrorText := 'La referencia introducida no exite en el catálogo del proveedor'; Error := True; end; end; function TfrViewDetallesPedidoProveedor.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; begin Result := (Controller as IDetallesPedidoProveedorController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Pedido.ID_PROVEEDOR); end; function TfrViewDetallesPedidoProveedor.GetPedido: IBizPedidoProveedor; begin Result := FPedido; end; procedure TfrViewDetallesPedidoProveedor.RellenarArticulosInterno; begin //No sé porque está en este módulo hecho así, supongo que por seguridad. if Assigned(Pedido) and Assigned(Pedido.Proveedor) then (Controller as IDetallesPedidoProveedorController).AnadirArticulos(Detalles, Pedido.Proveedor, False) else (Controller as IDetallesPedidoProveedorController).AnadirArticulos(Detalles, False); end; procedure TfrViewDetallesPedidoProveedor.SetPedido(const Value: IBizPedidoProveedor); begin FPedido := Value; end; end.