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, uDAInterfaces; type TfEditorEntradaSalidaArticulos = class(TfEditorDBItem, IEditorEntradaSalidaArticulos) 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; frViewEntradaSalidaArticulos1: TfrViewEntradaSalidaArticulos; 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, uBizObras, 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; frViewEntradaSalidaArticulos1.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; TBXItem7.Visible := True; end else begin pnlEntradaPedido.Visible := False; TBXItem7.Visible := False; end; 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; AObraOrigen: IBizObra; AObraDestino: IBizObra; begin inherited; FTitulo := ''; if Assigned(FArticulos) then begin //Titulos try AAlmacenOrigen := Controller.AlmacenesController.Buscar(FArticulos.IDAlmacenOrigen); AAlmacenOrigen.DataTable.Active := True; AObraOrigen := Controller.ObrasController.Buscar(FArticulos.IDAlmacenOrigen); AObraOrigen.DataTable.Active := True; AAlmacenDestino:= Controller.AlmacenesController.Buscar(FArticulos.IDAlmacenDestino); AAlmacenDestino.DataTable.Active := True; AObraDestino:= Controller.ObrasController.Buscar(FArticulos.IDAlmacenDestino); AObraDestino.DataTable.Active := True; case FArticulos.TipoMovimiento of tEntradaLibre : begin if AAlmacenDestino.RecordCount > 0 then FTitulo := 'Entrada de artículos en "' + AAlmacenDestino.NOMBRE + '"' else FTitulo := 'Entrada de artículos en "' + AObraDestino.NOMBRE + '"'; actGuardarCerrar.Caption := 'Realizar la entrada de los artículos'; end; tEntradaPedidoProveedor : begin if AAlmacenDestino.RecordCount > 0 then FTitulo := 'Entrada por pedido de artículos, en "' + AAlmacenDestino.NOMBRE + '"' else FTitulo := 'Entrada por pedido de artículos, en "' + AObraDestino.NOMBRE + '"'; actGuardarCerrar.Caption := 'Realizar la entrada de los artículos'; end; tSalidaLibre, tSalidaAlbaranCliente : begin if AAlmacenOrigen.RecordCount > 0 then FTitulo := 'Salida de artículos en "' + AAlmacenOrigen.NOMBRE + '"' else FTitulo := 'Salida de artículos en "' + AObraOrigen.NOMBRE + '"'; actGuardarCerrar.Caption := 'Realizar la salida de los artículos'; end; tTraslado: begin if AAlmacenOrigen.RecordCount > 0 then FTitulo := 'Traslado de artículos desde "' + AAlmacenOrigen.NOMBRE else FTitulo := 'Traslado de artículos desde "' + AObraOrigen.NOMBRE; if AAlmacenDestino.RecordCount > 0 then FTitulo := FTitulo + '" hasta "' + AAlmacenDestino.NOMBRE + '"' else FTitulo := FTitulo + '" hasta "' + AObraDestino.NOMBRE + '"'; actGuardarCerrar.Caption := 'Realizar el traslado de los artículos'; end; tReserva: begin if AAlmacenOrigen.RecordCount > 0 then FTitulo := 'Reserva de artículos de "' + AAlmacenOrigen.NOMBRE else FTitulo := 'Reserva de artículos de "' + AObraOrigen.NOMBRE; if AAlmacenDestino.RecordCount > 0 then FTitulo := FTitulo + '" para "' + AAlmacenDestino.NOMBRE + '"' else FTitulo := FTitulo + '" para "' + AObraDestino.NOMBRE + '"'; actGuardarCerrar.Caption := 'Realizar la reserva de los artículos'; Label2.Caption := 'Fecha de la reserva:'; end; end; finally AAlmacenOrigen := Nil; AAlmacenDestino:= Nil; AObraOrigen := Nil; AObraDestino:= Nil; end; //Botones de añadir y eliminar case FArticulos.TipoMovimiento of tEntradaLibre, tSalidaLibre, tTraslado, tReserva : begin pnlMovimiento.Visible := True; eFechaMovimiento.Date := Date; actAnadirInventario.Enabled := True; actAnadirInventario.Visible := True; actEliminarInventario.Enabled := True; actEliminarInventario.Visible := True; frViewEntradaSalidaArticulos1.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 frViewEntradaSalidaArticulos1.cxGridViewCANTIDAD.Properties.ReadOnly := True else frViewEntradaSalidaArticulos1.cxGridViewCANTIDAD.Properties.ReadOnly := False; end; end; end; end; procedure TfEditorEntradaSalidaArticulos.actAnchoAutoExecute(Sender: TObject); begin frViewEntradaSalidaArticulos1.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.