unit uEditorEntradaSalidaArticulos; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorDBItem, DB, uDADataTable, JvAppStorage, JvAppRegistryStorage, JvComponent, JvFormPlacement, ImgList, PngImageList, StdActns, ActnList, ComCtrls, TBX, TB2Item, TB2Dock, TB2Toolbar, ExtCtrls, JvExControls, JvNavigationPane, uCustomView, uViewBase, uEditorItem, pngimage, uViewGridBase, uViewGrid, JvComponentBase, uBizInventario, uViewEntradaSalidaArticulos, uIEditorEntradaSalidaArticulos, uInventarioController, JvExComCtrls, JvStatusBar, Grids, DBGrids, cxLabel, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxCalendar, cxMemo, ToolWin, dxLayoutControl, cxStyles, StdCtrls, Buttons, TBXDkPanels, uBizPedidosProveedor; type TfEditorEntradaSalidaArticulos = class(TfEditorDBItem, IEditorEntradaSalidaArticulos) frViewListaArticulos: TfrViewEntradaSalidaArticulos; actAnadirInventario: TAction; actEliminarInventario: TAction; actAnchoAuto: TAction; TBXItem7: TTBXItem; ToolBar1: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton6: TToolButton; ToolButton7: TToolButton; TBXItem33: TTBXItem; pnlMovimiento: TTBXDockablePanel; Label1: TLabel; eFechaMovimiento: TcxDateEdit; eCausa: TcxTextEdit; Label2: TLabel; pnlEntradaPedido: TTBXDockablePanel; Label3: TLabel; Label4: TLabel; TBXDockPaneles: TTBXDock; edtFechaPedido: TLabel; edtReferenciaPedido: TLabel; Label6: TLabel; edtSituacion: TLabel; Label7: TLabel; edtProveedor: TLabel; procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction); procedure actAnadirInventarioExecute(Sender: TObject); procedure actEliminarInventarioExecute(Sender: TObject); procedure actAnchoAutoExecute(Sender: TObject); procedure FormShow(Sender: TObject); procedure actEliminarInventarioUpdate(Sender: TObject); private FTitulo: String; FHayCambios: Boolean; FResultadoModalOK: Boolean; FController : IInventarioController; FArticulos: IBizInventario; //Los artículos de entrada o salida FInventario: IBizInventario; //Para sacar el stock FPedidoProveedor: IBizPedidoProveedor; function GetArticulos: IBizInventario; procedure SetArticulos(const Value: IBizInventario); function GetInventario: IBizInventario; procedure SetInventario(const Value: IBizInventario); function GetPedidoProveedor: IBizPedidoProveedor; procedure SetPedidoProveedor(const Value: IBizPedidoProveedor); function GetController : IInventarioController; procedure SetController (const Value : IInventarioController); function getResultadoModalOK: Boolean; protected procedure GuardarInterno; override; // procedure CancelarCambiosInterno; override; function GetModified: Boolean; override; public property Controller : IInventarioController read GetController write SetController; property Articulos: IBizInventario read GetArticulos write SetArticulos; property Inventario: IBizInventario read GetInventario write SetInventario; property PedidoProveedor: IBizPedidoProveedor read GetPedidoProveedor write SetPedidoProveedor; property ResultadoModalOK: Boolean read getResultadoModalOK; constructor Create(AOwner: TComponent); override; procedure PonerTitulos(const ATitulo: string = ''); override; end; implementation uses uEditorBase, uBizAlmacenes, schAlmacenesClient_Intf; {$R *.dfm} //uses uEditorUtils; { TfEditorRecibirPedido } function TfEditorEntradaSalidaArticulos.GetArticulos: IBizInventario; begin Result := FArticulos; end; function TfEditorEntradaSalidaArticulos.GetController: IInventarioController; begin Result := FController; end; function TfEditorEntradaSalidaArticulos.GetInventario: IBizInventario; begin Result := FInventario; end; function TfEditorEntradaSalidaArticulos.GetModified: Boolean; begin Result := FHayCambios; end; function TfEditorEntradaSalidaArticulos.GetPedidoProveedor: IBizPedidoProveedor; begin Result := FPedidoProveedor; end; function TfEditorEntradaSalidaArticulos.getResultadoModalOK: Boolean; begin Result := FResultadoModalOK; end; procedure TfEditorEntradaSalidaArticulos.GuardarInterno; begin inherited; //En este punto se realizará el applyupdates if FController.Guardar(FArticulos, eFechaMovimiento.Date, eCausa.Text) then FResultadoModalOK := True else FResultadoModalOK := False; FHayCambios:= False; end; procedure TfEditorEntradaSalidaArticulos.PonerTitulos(const ATitulo: string); begin inherited PonerTitulos(FTitulo); end; procedure TfEditorEntradaSalidaArticulos.SetArticulos(const Value: IBizInventario); begin FArticulos := Value; if Assigned(FArticulos) then dsDataTable.DataTable := FArticulos.DataTable else dsDataTable.DataTable := NIL; frViewListaArticulos.dsDataSource.DataTable := dsDataTable.DataTable; // PonerEtiquetasEnEditor end; procedure TfEditorEntradaSalidaArticulos.SetController(const Value: IInventarioController); begin FController := Value end; procedure TfEditorEntradaSalidaArticulos.SetInventario(const Value: IBizInventario); begin FInventario := Value; end; procedure TfEditorEntradaSalidaArticulos.SetPedidoProveedor(const Value: IBizPedidoProveedor); begin FPedidoProveedor := Value; if Assigned(FPedidoProveedor) then begin edtFechaPedido.Caption := DateToStr(FPedidoProveedor.FECHA_PEDIDO); edtReferenciaPedido.Caption := FPedidoProveedor.REFERENCIA; edtSituacion.Caption := FPedidoProveedor.SITUACION; edtProveedor.Caption := FPedidoProveedor.NOMBRE; pnlEntradaPedido.Visible := True end else pnlEntradaPedido.Visible := False; end; procedure TfEditorEntradaSalidaArticulos.actAnadirInventarioExecute(Sender: TObject); begin //Todos los cambios serán en caché hasta que el usuario decida guardar FController.Anadir(Articulos, Inventario); actAnchoAuto.Execute; FHayCambios:= True; end; procedure TfEditorEntradaSalidaArticulos.CustomEditorClose(Sender: TObject; var Action: TCloseAction); begin inherited; FController := Nil; FArticulos:= Nil; FInventario:= Nil; FPedidoProveedor:= Nil; end; procedure TfEditorEntradaSalidaArticulos.FormShow(Sender: TObject); var AAlmacenOrigen: IBizAlmacen; AAlmacenDestino: IBizAlmacen; begin inherited; FTitulo := ''; if Assigned(FArticulos) then begin //Titulos try AAlmacenOrigen := Controller.AlmacenesController.Buscar(FArticulos.IDAlmacenOrigen); AAlmacenDestino:= Controller.AlmacenesController.Buscar(FArticulos.IDAlmacenDestino); AAlmacenOrigen.DataTable.Active := True; AAlmacenDestino.DataTable.Active := True; case FArticulos.TipoMovimiento of tEntradaLibre : begin FTitulo := 'Entrada de artículos en el almacén "' + AAlmacenDestino.NOMBRE + '"'; actGuardarCerrar.Caption := 'Realizar la entrada de los artículos'; end; tEntradaPedidoProveedor : begin FTitulo := 'Entrada por pedido de artículos, en el almacén "' + AAlmacenDestino.NOMBRE + '"'; actGuardarCerrar.Caption := 'Realizar la entrada de los artículos'; end; tSalidaLibre, tSalidaAlbaranCliente : begin FTitulo := 'Salida de artículos en el almacén "' + AAlmacenOrigen.NOMBRE + '"'; actGuardarCerrar.Caption := 'Realizar la salida de los artículos'; end; tTraslado: begin FTitulo := 'Traslado de artículos desde el almacén "' + AAlmacenOrigen.NOMBRE + '" hasta el almacén "' + AAlmacenDestino.NOMBRE + '"'; actGuardarCerrar.Caption := 'Realizar el traslado de los artículos'; end; end; finally AAlmacenOrigen := Nil; AAlmacenDestino:= Nil; end; //Botones de añadir y eliminar case FArticulos.TipoMovimiento of tEntradaLibre, tSalidaLibre, tTraslado : begin pnlMovimiento.Visible := True; eFechaMovimiento.Date := Date; actAnadirInventario.Enabled := True; actAnadirInventario.Visible := True; actEliminarInventario.Enabled := True; actEliminarInventario.Visible := True; frViewListaArticulos.cxGridViewCANTIDAD.Properties.ReadOnly := False; end; tEntradaPedidoProveedor, tSalidaAlbaranCliente : begin if (FArticulos.TipoMovimiento = tEntradaPedidoProveedor) then ToolBar1.Visible := False; actAnadirInventario.Enabled := False; actAnadirInventario.Visible := False; actEliminarInventario.Enabled := False; actEliminarInventario.Visible := False; if (FArticulos.TipoMovimiento = tSalidaAlbaranCliente) then frViewListaArticulos.cxGridViewCANTIDAD.Properties.ReadOnly := True else frViewListaArticulos.cxGridViewCANTIDAD.Properties.ReadOnly := False; end; end; end; end; procedure TfEditorEntradaSalidaArticulos.actAnchoAutoExecute(Sender: TObject); begin frViewListaArticulos.cxGridView.ApplyBestFit; end; procedure TfEditorEntradaSalidaArticulos.actEliminarInventarioExecute(Sender: TObject); begin //Todos los cambios serán en caché hasta que el usuario decida guardar Controller.Eliminar(Articulos, false, false); FHayCambios:= True; end; procedure TfEditorEntradaSalidaArticulos.actEliminarInventarioUpdate( Sender: TObject); begin inherited; (Sender as TAction).Enabled := HayDatos; end; constructor TfEditorEntradaSalidaArticulos.Create(AOwner: TComponent); begin inherited; FTitulo := ''; FHayCambios:= False; FResultadoModalOK := False; end; end.