{ =============================================================================== Copyright (©) 2001. Rodax Software. =============================================================================== Los contenidos de este fichero son propiedad de Rodax Software titular del copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, en su totalidad o en parte, con el permiso escrito de Rodax Software, o de acuerdo con los términos y condiciones establecidas en el acuerdo/contrato bajo el que se suministra. ----------------------------------------------------------------------------- Web: www.rodax-software.com =============================================================================== Fecha primera versión: 01-10-2001 Versión actual: 1.1.4 Fecha versión actual: 06-03-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 20-10-2001 Cambiado el método 'FacturarPedido' para que compruebe antes si ese pedido ya está facturado. 20-10-2001 Se ha añadido la función 'DarSituación'. 20-10-2001 Añadir la columna 'Nombre de almacén' a la lista de pedidos. 21-10-2001 La sentencia UPDATE de pedidos tenía para persona de contacto del proveedor y para persona de contacto del almacén la misma variable host, por lo que al actualizar un pedido se ponia el mismo nombre en los dos campos. 02-11-2001 Se ha eliminado la columna FACTURADO por CODIGOFACTURA. 10-11-2001 Se han eliminado las DB_KEYS. 27-11-2001 Se han mejorado los procedimientos de devolver y recibir pedidos obligando a que la situacion sea la idonea. 27-11-2001 En la columna 'Unid. medida' aparece una lista desplegable. 12-01-2002 Añadido el cliente final a los pedidos de proveedor. 22-01-2002 Se han cambiado las SQL para que la columna PENDIENTES no dependa directamente de CANTIDAD. Es para permitir modificar un pedido parcialmente recibido. 07-04-2002 Adaptar todas las funciones a la transacción única. 05-05-2002 Adaptación al grid 'TdxDBGrid'. 27-05-2002 Cambio a un objeto contador (TContadorPedidoProveedor) 16-11-2002 p250. Poner el número total de pedidos dados de alta en la inicialización del grid. 08-04-2003 P263. Agrupar por años los pedidos, nueva función DarListaAnos. 06-03-2004 P272. Adaptación a multiempresa. =============================================================================== } unit TablaPedidosProveedor; interface uses SysUtils, classes, forms, IB, IBSQL, IBDatabase, BaseDatos, dxDBGrid, Contadores; type TDatosPedidoProveedor = class(TPersistent) public CodigoEmpresa : Integer; Codigo : String; FechaAlta : String; FechaEmision : String; FechaRecepcion : String; Situacion : String; Usuario : String; Notas : String; CodigoProveedor : String; NifCif : String; Nombre : String; Fax : String; PersonaContacto : String; CodigoCliente : String; CodigoAlmacen : String; NombreAlmacen : String; CalleAlmacen : String; NumeroAlmacen : String; PisoAlmacen : String; CodigoPostalAlmacen : String; PoblacionAlmacen : String; ProvinciaAlmacen : String; PersonaContactoAlmacen : String; ImporteTotal : String; CodigoFactura : String; end; TDatosDetallePedidoProveedor = class(TPersistent) public CodigoEmpresa : Integer; CodigoPedido : String; NumConcepto : Integer; CodigoArticulo : String; RefProveedor : String; RefFabricante : String; Descripcion : String; Cantidad : String; Precio : String; Descuento : String; Total : String; Pendientes : String; end; TdmTablaPedidosProveedor = class(TDataModule) private procedure IniciarSQLPedido; procedure IniciarSQLDetalles; procedure IniciarSQLGrids; public sqlInsertarPedido : TStrings; sqlModificarPedido : TStrings; sqlConsultarPedido : TStrings; sqlEliminarPedido : TStrings; sqlConsultarGridPedidos : TStrings; sqlConsultarGridPedidosProv : TStrings; sqlConsultarGridPedidosRecibir : TStrings; sqlConsultarGridPedidosDevolver : TStrings; sqlConsultarGridPedidosFacturar : TStrings; sqlInsertarDetalles : TStrings; sqlModificarDetalles : TStrings; sqlConsultarDetalles : TStrings; sqlEliminarDetalles : TStrings; sqlConsultarGridDetalles : TStrings; //Metodos que llamaran a contador function DarNuevoCodigo : String; function InsertarContador : boolean; function IncrementarCodigo : boolean; function ValidarCodigo(Codigo : String) : Boolean; function FormatearCodigo(Codigo : String) : String; function DarDatosPedido(Pedido: TDatosPedidoProveedor): Boolean; function ExisteCodigo(CodigoEmpresa: Integer; Codigo : String) : Boolean; function EmitirPedido(CodigoEmpresa : Integer; Codigo: String; FechaEmision: TDateTime): Boolean; function CancelarPedido(CodigoEmpresa : Integer; Codigo : String) : Boolean; function FacturarPedido(CodigoEmpresa : Integer; CodigoPedido, CodigoFactura: String) : boolean; function NoFacturarPedido(CodigoEmpresa : Integer; CodigoPedido: String) : boolean; function PedidoFacturado(CodigoEmpresa : Integer; CodigoPedido: String): boolean; function DevolverPedido(CodigoEmpresa : Integer; CodigoPedido, Fecha: String): boolean; function BloquearPedido(CodigoEmpresa : Integer; CodigoPedido, Fecha : String): boolean; function RecibirTotalmentePedido(CodigoEmpresa : Integer; CodigoPedido, Fecha : String): boolean; function RecibirParcialmentePedido(CodigoEmpresa : Integer; CodigoPedido, Fecha : String): boolean; constructor Create (AOwner : TComponent); override; destructor Destroy; override; procedure InicializarGridDetalles(var Grid: TdxDBGrid); procedure InicializarGridPedidos(var Grid: TdxDBGrid); procedure InicializarTablaPedidos(Tabla: TPTabla); procedure InicializarTablaDetalles(Tabla: TPTabla); function DarSituaciones : TStrings; function ModificarUnidadesPendientesArticulo(Datos : TDatosDetallePedidoProveedor): Boolean; function DarUnidadesPendientes(CodigoEmpresa: Integer; CodigoPedido: String): String; function DarSituacion(CodigoEmpresa: Integer; CodigoPedido : String) : String; function ExisteArticuloEnPedido(CodigoEmpresa: Integer; CodigoArticulo: String): Boolean; function ExisteAlmacenEnPedido(CodigoEmpresa: Integer; CodigoAlmacen: String; var CodigoPedido, Situacion : String): Boolean; function DarListaAnos(CodigoEmpresa : Integer): TStringList; end; var dmTablaPedidosProveedor: TdmTablaPedidosProveedor; implementation {$R *.DFM} uses Mensajes, db, dbgrids, StrFunc, Excepciones, TablaUnidadesMedida, dxDBCtrl, dxDBTLCL, IBCustomDataSet, dxTL, Constantes, Literales, RdxGestorContadores; constructor TdmTablaPedidosProveedor.Create (AOwner : TComponent); begin inherited; { Cabecera } sqlInsertarPedido := TStringList.Create; sqlModificarPedido := TStringList.Create; sqlConsultarPedido := TStringList.Create; sqlEliminarPedido := TStringList.Create; { Detalles } sqlInsertarDetalles := TStringList.Create; sqlModificarDetalles := TStringList.Create; sqlConsultarDetalles := TStringList.Create; sqlEliminarDetalles := TStringList.Create; { Grids } sqlConsultarGridPedidos := TStringList.Create; sqlConsultarGridPedidosProv := TStringList.Create; sqlConsultarGridDetalles := TStringList.Create; sqlConsultarGridPedidosRecibir := TStringList.Create; sqlConsultarGridPedidosDevolver := TStringList.Create; sqlConsultarGridPedidosFacturar := TStringList.Create; IniciarSQLPedido; IniciarSQLDetalles; IniciarSQLGrids; end; destructor TdmTablaPedidosProveedor.Destroy; begin { Cabecera } sqlInsertarPedido.Free; sqlModificarPedido.Free; sqlConsultarPedido.Free; sqlEliminarPedido.Free; { Detalles } sqlInsertarDetalles.Free; sqlModificarDetalles.Free; sqlConsultarDetalles.Free; sqlEliminarDetalles.Free; { Grids } sqlConsultarGridPedidos.Free; sqlConsultarGridPedidosProv.Free; sqlConsultarGridDetalles.Free; sqlConsultarGridPedidosRecibir.Free; sqlConsultarGridPedidosDevolver.Free; sqlConsultarGridPedidosFacturar.Free; inherited; end; procedure TdmTablaPedidosProveedor.IniciarSQLPedido; begin with sqlInsertarPedido do begin Add('insert into PEDIDOSPROVEEDOR '); Add('(CODIGOEMPRESA, CODIGO, FECHAALTA, FECHAEMISION, FECHARECEPCION, '); Add('SITUACION, USUARIO, NOTAS, CODIGOPROVEEDOR, NIFCIF, '); Add('NOMBRE, FAX, PERSONACONTACTO, CODIGOCLIENTE, CODIGOALMACEN, '); Add('NOMBREALMACEN, CALLEALMACEN, NUMEROALMACEN, PISOALMACEN, '); Add('CODIGOPOSTALALMACEN, POBLACIONALMACEN, PROVINCIAALMACEN, '); Add('PERSONACONTACTOALMACEN, IMPORTETOTAL, '); Add('CODIGOOBRA, NOMBREOBRA) '); Add('values (:CODIGOEMPRESA, :CODIGO, :FECHAALTA, :FECHAEMISION, :FECHARECEPCION, '); Add(':SITUACION, :USUARIO, :NOTAS, :CODIGOPROVEEDOR, :NIFCIF, '); Add(':NOMBRE, :FAX, :PERSONACONTACTO, :CODIGOCLIENTE, :CODIGOALMACEN, '); Add(':NOMBREALMACEN, :CALLEALMACEN, :NUMEROALMACEN, :PISOALMACEN, '); Add(':CODIGOPOSTALALMACEN, :POBLACIONALMACEN, :PROVINCIAALMACEN, '); Add(':PERSONACONTACTOALMACEN, :IMPORTETOTAL, '); Add(':CODIGOOBRA, :NOMBREOBRA)'); end; with sqlModificarPedido do begin Add('update PEDIDOSPROVEEDOR set '); Add('FECHAALTA = :FECHAALTA, '); Add('FECHAEMISION = :FECHAEMISION, '); Add('FECHARECEPCION = :FECHARECEPCION, '); Add('SITUACION = :SITUACION, '); Add('USUARIO = :USUARIO, '); Add('NOTAS = :NOTAS, '); Add('CODIGOPROVEEDOR = :CODIGOPROVEEDOR, '); Add('NIFCIF = :NIFCIF, '); Add('NOMBRE = :NOMBRE, '); Add('FAX = :FAX, '); Add('PERSONACONTACTO = :PERSONACONTACTO, '); Add('CODIGOCLIENTE = :CODIGOCLIENTE, '); Add('CODIGOALMACEN = :CODIGOALMACEN, '); Add('NOMBREALMACEN = :NOMBREALMACEN, '); Add('CALLEALMACEN = :CALLEALMACEN, '); Add('NUMEROALMACEN = :NUMEROALMACEN, '); Add('PISOALMACEN = :PISOALMACEN, '); Add('CODIGOPOSTALALMACEN = :CODIGOPOSTALALMACEN, '); Add('POBLACIONALMACEN = :POBLACIONALMACEN, '); Add('PROVINCIAALMACEN = :PROVINCIAALMACEN, '); Add('PERSONACONTACTOALMACEN = :PERSONACONTACTOALMACEN, '); Add('IMPORTETOTAL = :IMPORTETOTAL, '); Add('CODIGOOBRA = :CODIGOOBRA, '); Add('NOMBREOBRA = :NOMBREOBRA '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) and (CODIGO = :CODIGO)'); end; with sqlEliminarPedido do begin Add('delete from PEDIDOSPROVEEDOR '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) and (CODIGO = :CODIGO)'); end; with sqlConsultarPedido do begin Add('select * from PEDIDOSPROVEEDOR '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) and (CODIGO = :CODIGO)'); end; end; procedure TdmTablaPedidosProveedor.IniciarSQLDetalles; begin with sqlInsertarDetalles do begin Add('insert into DETALLESPEDIDOSPROVEEDOR '); Add('(CODIGOEMPRESA, CODIGOPEDIDO, NUMCONCEPTO, CODIGOARTICULO, REFPROVEEDOR, REFFABRICANTE, DESCRIPCION, '); Add('CANTIDAD, UNIDADESMEDIDA, PRECIO, DESCUENTO, TOTAL, PENDIENTES) '); Add('values (:CODIGOEMPRESA, :CODIGOPEDIDO, :NUMCONCEPTO, :CODIGOARTICULO, :REFPROVEEDOR, :REFFABRICANTE, :DESCRIPCION, '); Add(':CANTIDAD, :UNIDADESMEDIDA, :PRECIO, :DESCUENTO, :TOTAL, :PENDIENTES)'); end; with sqlModificarDetalles do begin Add('update DETALLESPEDIDOSPROVEEDOR set '); Add('CODIGOPEDIDO = :CODIGOPEDIDO, '); Add('NUMCONCEPTO = :NUMCONCEPTO, '); Add('CODIGOARTICULO = :CODIGOARTICULO, '); Add('REFPROVEEDOR = :REFPROVEEDOR, '); Add('REFFABRICANTE = :REFFABRICANTE, '); Add('DESCRIPCION = :DESCRIPCION, '); Add('CANTIDAD = :CANTIDAD, '); Add('UNIDADESMEDIDA = :UNIDADESMEDIDA, '); Add('PRECIO = :PRECIO, '); Add('DESCUENTO = :DESCUENTO, '); Add('TOTAL = :TOTAL, '); Add('PENDIENTES = :PENDIENTES '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) and (CODIGOPEDIDO = :CODIGOPEDIDO) and '); Add('(NUMCONCEPTO = :NUMCONCEPTO)'); end; with sqlEliminarDetalles do begin Add('delete from DETALLESPEDIDOSPROVEEDOR '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) and (CODIGOPEDIDO = :CODIGOPEDIDO) and '); Add('(NUMCONCEPTO = :NUMCONCEPTO)'); end; with sqlConsultarDetalles do begin Add('select CODIGOPEDIDO, NUMCONCEPTO, '); Add('CODIGOARTICULO, REFPROVEEDOR, REFFABRICANTE, DESCRIPCION, CANTIDAD, PRECIO, '); Add('DESCUENTO, TOTAL, UNIDADESMEDIDA, PENDIENTES '); Add('from DETALLESPEDIDOSPROVEEDOR '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) and (CODIGOPEDIDO = :CODIGOPEDIDO) and '); Add('(NUMCONCEPTO = :NUMCONCEPTO)'); end; end; function TdmTablaPedidosProveedor.DarNuevoCodigo : String; begin Result := GestorContadores.DarNuevoCodigo(contPedidosProveedor); end; function TdmTablaPedidosProveedor.InsertarContador : boolean; begin Result := GestorContadores.InsertarContador(contPedidosProveedor); end; function TdmTablaPedidosProveedor.IncrementarCodigo : Boolean; begin Result := GestorContadores.IncrementarValor(contPedidosProveedor); end; function TdmTablaPedidosProveedor.ValidarCodigo(Codigo : String) : Boolean; begin Result := GestorContadores.ValidarCodigo(contPedidosProveedor, Codigo); end; function TdmTablaPedidosProveedor.FormatearCodigo(Codigo : String) : String; begin Result := GestorContadores.FormatearCodigo(contPedidosProveedor, Codigo); end; procedure TdmTablaPedidosProveedor.InicializarTablaPedidos(Tabla : TPTabla); begin with Tabla^.Fields do begin if FindField('FECHAALTA') <> NIL then with (FieldByName('FECHAALTA') as TDateField) do begin EditMask := MASK_FECHA; end; if FindField('FECHAEMISION') <> NIL then with (FieldByName('FECHAEMISION') as TDateField) do begin EditMask := MASK_FECHA; end; if FindField('FECHARECEPCION') <> NIL then with (FieldByName('FECHARECEPCION') as TDateField) do begin EditMask := MASK_FECHA; end; if FindField('IMPORTETOTAL') <> NIL then //with (FieldByName('IMPORTETOTAL') as TFloatField) do begin with (FieldByName('IMPORTETOTAL') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; DisplayLabel := 'Importe total'; end; end; end; procedure TdmTablaPedidosProveedor.InicializarGridPedidos(var Grid: TdxDBGrid); var Columna : TdxDBTreeListColumn; begin with Grid do begin DestroyColumns; ShowSummaryFooter := True; {Columna CODIGO} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Sorted := csDown; Columna.SummaryFooterType := cstCount; Columna.SummaryFooterFormat := 'Total: 0 pedidos'; {Columna ANO} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'ANO'; Columna.Caption := 'Año'; Columna.Width := tamColFecha; Columna.Visible := False; {Columna SITUACION} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'SITUACION'; Columna.Caption := 'Situación'; Columna.Width := tamColSituacion; {Columna FECHAALTA} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'FECHAALTA'; Columna.Caption := 'Fecha alta'; Columna.Width := tamColFecha; {Columna NOMBRE} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombre; {Columna NOMBREALMACEN} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'NOMBREALMACEN'; Columna.Caption := 'Almacén'; Columna.Width := tamColNombreAlmacen; {Columna NOMBREOBRA} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'NOMBREOBRA'; Columna.Caption := 'Cliente final'; Columna.Width := tamColNombre; {Columna FECHAEMISION} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'FECHAEMISION'; Columna.Caption := 'Emisión'; Columna.Width := tamColFecha; {Columna FECHARECEPCION} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'FECHARECEPCION'; Columna.Caption := 'Recepción'; Columna.Width := tamColFecha; {Columna IMPORTETOTAL} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'IMPORTETOTAL'; Columna.Caption := 'Importe'; Columna.Width := tamColPrecio; Columna.Visible := False; {Columna CODIGOFACTURA} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'CODIGOFACTURA'; Columna.Caption := 'Cód. factura'; Columna.Width := tamColCodigo; {Columna NIFCIF} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'NIFCIF'; Columna.Caption := 'NIF/CIF'; Columna.Width := tamColNIFCIF; {Columna CODIGOPROVEEDOR} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'CODIGOPROVEEDOR'; Columna.Caption := 'Cód. prov.'; Columna.Width := tamColCodigo; end; end; procedure TdmTablaPedidosProveedor.InicializarTablaDetalles(Tabla : TPTabla); begin with Tabla^.Fields do begin with (FieldByName('PRECIO') as TFloatField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; with (FieldByName('DESCUENTO') as TFloatField) do begin DisplayFormat := DISPLAY_DTO; EditFormat := EDIT_DTO; end; with (FieldByName('TOTAL') as TFloatField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; end; end; procedure TdmTablaPedidosProveedor.InicializarGridDetalles(var Grid: TdxDBGrid); var Columna : TdxDBTreeListColumn; begin with Grid do begin DestroyColumns; {Columna CODIGOPEDIDO} Columna := CreateColumn(TdxDBTreeListColumn); Columna.Visible := False; Columna.FieldName := 'CODIGOPEDIDO'; {Columna NUMCONCEPTO} Columna := CreateColumn(TdxDBTreeListColumn); Columna.Visible := False; Columna.FieldName := 'NUMCONCEPTO'; {Columna CODIGOARTICULO} Columna := CreateColumn(TdxDBTreeListButtonColumn); Columna.FieldName := 'CODIGOARTICULO'; Columna.Caption := 'Cód. material'; Columna.Width := tamColCodigo; Columna.ReadOnly := True; {Columna REFPROVEEDOR} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'REFPROVEEDOR'; Columna.Caption := 'Ref. proveedor'; Columna.Width := tamColCodigo; {Columna REFFABRICANTES} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'REFFABRICANTE'; Columna.Caption := 'Ref. fabricante'; Columna.Width := tamColCodigo; {Columna DESCRIPCION} Columna := CreateColumn(TdxDBTreeListButtonColumn); Columna.FieldName := 'DESCRIPCION'; Columna.Caption := 'Descripción material/servicio'; Columna.Width := tamColDescripcion; {Columna CANTIDAD} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'CANTIDAD'; Columna.Alignment := taRightJustify; Columna.Caption := 'Cantidad'; Columna.Width := tamColCantidad; {Columna UNIDADESMEDIDA} Columna := CreateColumn(TdxDBTreeListPickColumn); Columna.FieldName := 'UNIDADESMEDIDA'; Columna.Caption := 'Unid. medida'; Columna.Width := tamColUnidadesMedida; (Columna as TdxDBTreeListPickColumn).Items := dmTablaUnidadesMedida.DarUnidadesMedida; {Columna PENDIENTES} Columna := CreateColumn(TdxDBTreeListColumn); Columna.Visible := False; Columna.FieldName := 'PENDIENTES'; Columna.Width := tamColCantidad; {Columna PRECIO} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'PRECIO'; Columna.Caption := 'Precio unidad'; Columna.Width := tamColPrecio; // Columna.Visible := False; {Columna DESCUENTO} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'DESCUENTO'; Columna.Alignment := taRightJustify; Columna.Caption := 'Dto (%)'; Columna.Width := tamColPorcentaje; Columna.Visible := False; {Columna TOTAL} Columna := CreateColumn(TdxDBTreeListColumn); Columna.FieldName := 'TOTAL'; Columna.Caption := 'Precio total'; Columna.ReadOnly := True; Columna.Width := tamColPrecio; // Columna.Visible := False; end; end; function TdmTablaPedidosProveedor.ExisteCodigo(CodigoEmpresa : Integer; Codigo: String): Boolean; var oSQL : TIBSQL; Contador : String; begin Result := False; if EsCadenaVacia(Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO '); SQL.Add('from PEDIDOSPROVEEDOR '); SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) and (CODIGO = :CODIGO)'); ParamByName('CODIGO').AsString := Codigo; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; Contador := Fields[0].AsString; Result := (Codigo = Contador); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.EmitirPedido(CodigoEmpresa : Integer; Codigo: String; FechaEmision: TDateTime): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update PEDIDOSPROVEEDOR set '); SQL.Add('SITUACION = ''Emitido'', '); SQL.Add('FECHAEMISION = :FECHAEMISION '); SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) and (CODIGO = :CODIGO)'); ParamByName('CODIGO').AsString := Codigo; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; ParamByName('FECHAEMISION').AsDate := FechaEmision; try Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.CancelarPedido(CodigoEmpresa : Integer; Codigo: String): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update PEDIDOSPROVEEDOR set '); SQL.Add('SITUACION = ''No emitido'', '); SQL.Add('FECHAEMISION = NULL '); SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) and (CODIGO = :CODIGO)'); try ParamByName('CODIGO').AsString := Codigo; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaPedidosProveedor.IniciarSQLGrids; begin with sqlConsultarGridPedidos do begin Add('select CODIGO, SITUACION, FECHAALTA, '); Add('EXTRACT (YEAR FROM FECHAALTA) as ANO, '); Add('NOMBRE, NOMBREALMACEN, NOMBREOBRA, FECHAEMISION, FECHARECEPCION, '); Add('IMPORTETOTAL, CODIGOFACTURA, CODIGOPROVEEDOR, NIFCIF '); Add('from PEDIDOSPROVEEDOR '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) '); Add('order by CODIGO'); end; with sqlConsultarGridPedidosProv do begin Add('select CODIGO, SITUACION, FECHAALTA, CODIGOPROVEEDOR, NIFCIF, '); Add('EXTRACT (YEAR FROM FECHAALTA) as ANO, '); Add('NOMBRE, FECHAEMISION, FECHARECEPCION, NOMBREALMACEN, '); Add('NOMBREOBRA, IMPORTETOTAL, CODIGOFACTURA '); Add('from PEDIDOSPROVEEDOR '); Add('where (CODIGOPROVEEDOR = :CODIGOPROVEEDOR) '); Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); Add('order by CODIGO'); end; with sqlConsultarGridPedidosRecibir do begin Add('select CODIGO, SITUACION, FECHAALTA, CODIGOPROVEEDOR, NIFCIF, '); Add('EXTRACT (YEAR FROM FECHAALTA) as ANO, '); Add('NOMBRE, FECHAEMISION, FECHARECEPCION, NOMBREALMACEN, '); Add('NOMBREOBRA, IMPORTETOTAL, CODIGOFACTURA '); Add('from PEDIDOSPROVEEDOR '); Add('where UPPER(SITUACION) IN (''EMITIDO'', ''PARCIALMENTE RECIBIDO'') '); Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); Add('order by CODIGO'); end; with sqlConsultarGridPedidosDevolver do begin Add('select CODIGO, SITUACION, FECHAALTA, CODIGOPROVEEDOR, NIFCIF, '); Add('EXTRACT (YEAR FROM FECHAALTA) as ANO, '); Add('NOMBRE, FECHAEMISION, FECHARECEPCION, NOMBREALMACEN, '); Add('NOMBREOBRA, IMPORTETOTAL, CODIGOFACTURA '); Add('from PEDIDOSPROVEEDOR '); Add('where UPPER(SITUACION) = ''TOTALMENTE RECIBIDO'' '); Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); Add('order by CODIGO'); end; with sqlConsultarGridPedidosFacturar do begin Add('select CODIGO, SITUACION, FECHAALTA, CODIGOPROVEEDOR, NIFCIF, '); Add('EXTRACT (YEAR FROM FECHAALTA) as ANO, '); Add('NOMBRE, FECHAEMISION, FECHARECEPCION, NOMBREALMACEN, '); Add('NOMBREOBRA, IMPORTETOTAL, CODIGOFACTURA '); Add('from PEDIDOSPROVEEDOR '); Add('where (CODIGOFACTURA is NULL) and '); Add('(UPPER(SITUACION) IN (''TOTALMENTE RECIBIDO'', ''DEVUELTO'')) and '); Add('(CODIGOPROVEEDOR = :CODIGOPROVEEDOR) '); Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); Add('order by CODIGO'); end; with sqlConsultarGridDetalles do begin Add('select CODIGOEMPRESA, CODIGOPEDIDO, NUMCONCEPTO, '); Add('CODIGOARTICULO, REFPROVEEDOR, REFFABRICANTE, DESCRIPCION, '); Add('CANTIDAD, PRECIO, DESCUENTO, TOTAL, UNIDADESMEDIDA, PENDIENTES '); Add('from DETALLESPEDIDOSPROVEEDOR '); Add('where CODIGOPEDIDO = :CODIGOPEDIDO '); Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); Add('order by NUMCONCEPTO'); end; end; function TdmTablaPedidosProveedor.DarDatosPedido(Pedido: TDatosPedidoProveedor): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(Pedido.Codigo) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select * from PEDIDOSPROVEEDOR '); SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) and (CODIGO = :CODIGO)'); try ParamByName('CODIGO').AsString := Pedido.Codigo; ParamByName('CODIGOEMPRESA').AsInteger := Pedido.CodigoEmpresa; Prepare; ExecQuery; //Compruebo que el codigo de almacen existe si no existe devuelvo false if (RecordCount > 0) then begin with Pedido do begin FechaAlta := FieldByName('FECHAALTA').AsString; FechaEmision := FieldByName('FECHAEMISION').AsString; FechaRecepcion := FieldByName('FECHARECEPCION').AsString; Situacion := FieldByName('SITUACION').AsString; Usuario:= FieldByName('USUARIO').AsString; Notas := FieldByName('NOTAS').AsString; CodigoProveedor := FieldByName('CODIGOPROVEEDOR').AsString; NifCif := FieldByName('NIFCIF').AsString; Nombre := FieldByName('NOMBRE').AsString; Fax := FieldByName('FAX').AsString; PersonaContacto := FieldByName('PERSONACONTACTO').AsString; CodigoCliente := FieldByName('CODIGOCLIENTE').AsString; CodigoAlmacen := FieldByName('CODIGOALMACEN').AsString; NombreAlmacen := FieldByName('NOMBREALMACEN').AsString; CalleAlmacen := FieldByName('CALLEALMACEN').AsString; NumeroAlmacen := FieldByName('NUMEROALMACEN').AsString; PisoAlmacen := FieldByName('PISOALMACEN').AsString; CodigoPostalAlmacen := FieldByName('CODIGOPOSTALALMACEN').AsString; PoblacionAlmacen := FieldByName('POBLACIONALMACEN').AsString; ProvinciaAlmacen := FieldByName('PROVINCIAALMACEN').AsString; PersonaContactoAlmacen := FieldByName('PERSONACONTACTOALMACEN').AsString; ImporteTotal := FieldByName('IMPORTETOTAL').AsString; CodigoFactura := FieldByName('CODIGOFACTURA').AsString; Result := True; end; end; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.DarSituaciones: TStrings; var oSQL : TIBSQL; Lista : TStringList; begin Result := NIL; oSQL := TIBSQL.Create(Self); Lista := TStringList.Create; with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select DESCRIPCION from SITUPEDIDOS'); try Prepare; ExecQuery; while not EOF do begin Lista.Append(Fields[0].AsString); Next; end; Result := Lista; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.ModificarUnidadesPendientesArticulo(Datos: TDatosDetallePedidoProveedor): Boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update DETALLESPEDIDOSPROVEEDOR '); SQL.Add('set PENDIENTES = PENDIENTES - :CANTIDAD '); SQL.Add('where CODIGOPEDIDO = :CODIGOPEDIDO '); SQL.Add('and CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('and NUMCONCEPTO = :NUMCONCEPTO '); SQL.Add('and (PENDIENTES - :CANTIDAD) >= 0 '); ParamByName('CANTIDAD').AsFloat := StrToFloat(Datos.Cantidad); ParamByName('CODIGOPEDIDO').AsString := Datos.CodigoPedido; ParamByName('CODIGOEMPRESA').AsInteger := Datos.CodigoEmpresa; ParamByName('NUMCONCEPTO').AsInteger := Datos.NumConcepto; try Prepare; ExecQuery; if RowsAffected <> 0 then Result := True else raise Exception.Create(msgPedidoYaRecibido); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.DarUnidadesPendientes(CodigoEmpresa: Integer; CodigoPedido: String): String; var oSQL : TIBSQL; begin Result := '-1'; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select sum(PENDIENTES) '); SQL.Add('from DETALLESPEDIDOSPROVEEDOR '); SQL.Add('where CODIGOPEDIDO = :CODIGOPEDIDO '); SQL.Add('and CODIGOEMPRESA = :CODIGOEMPRESA '); try ParamByName('CODIGOPEDIDO').AsString := CodigoPedido; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.ExisteArticuloEnPedido(CodigoEmpresa: Integer; CodigoArticulo: String): Boolean; {Comprueba si existe un articulo en un determinado almacen, pasandole por parametro el codigo de articulo y el del almacen, devuelve true o false dependiendo si existe o no} var oSQL : TIBSQL; Codigo : String; begin Result := False; if (Length(Trim(CodigoArticulo)) = 0) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select distinct DET.CODIGOARTICULO '); SQL.Add('from PEDIDOSPROVEEDOR PED, DETALLESPEDIDOSPROVEEDOR DET'); SQL.Add('where DET.CODIGOARTICULO = :CODIGOARTICULO '); SQL.Add('and DET.CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('and PED.CODIGOEMPRESA = DET.CODIGOEMPRESA '); SQL.Add('and PED.CODIGO = DET.CODIGOPEDIDO '); SQL.Add('and UPPER(PED.SITUACION) IN (''NO EMITIDO'',''EMITIDO'',''PARCIALMENTE RECIBIDO'') '); ParamByName('CODIGOARTICULO').AsString := CodigoArticulo; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; if (RecordCount = 0) then Result := False; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.FacturarPedido(CodigoEmpresa : Integer; CodigoPedido, CodigoFactura: String) : boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update PEDIDOSPROVEEDOR set '); SQL.Add('CODIGOFACTURA = :CODIGOFACTURA'); SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) and (CODIGO = :CODIGO) '); SQL.Add('and (CODIGOFACTURA is NULL) '); ParamByName('CODIGO').AsString := CodigoPedido; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; ParamByName('CODIGOFACTURA').AsString := CodigoFactura; try Prepare; ExecQuery; Result := RowsAffected > 0; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.NoFacturarPedido(CodigoEmpresa : Integer; CodigoPedido: String): boolean; var oSQL : TIBSQL; begin Result := False; if (Length(Trim(CodigoPedido)) = 0) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update PEDIDOSPROVEEDOR set '); SQL.Add('CODIGOFACTURA = NULL'); SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) and (CODIGO = :CODIGO) '); ParamByName('CODIGO').AsString := CodigoPedido; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.ExisteAlmacenEnPedido(CodigoEmpresa: Integer; CodigoAlmacen: String; var CodigoPedido, Situacion : String): Boolean; {Comprueba si existe un almacen en un determinado pedido, pasandole por parametro el codigo de almacen, devuelve true o false dependiendo si existe o no} var oSQL : TIBSQL; Codigo : String; begin Result := False; Codigo := Trim(CodigoAlmacen); if (Length(Codigo) = 0) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO, SITUACION '); SQL.Add('from PEDIDOSPROVEEDOR '); SQL.Add('where (CODIGOALMACEN = :CODIGOALMACEN) '); SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); SQL.Add('and (UPPER(SITUACION) NOT IN (''DEVUELTO''))'); ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; ParamByName('CODIGOALMACEN').AsString := Codigo; try Prepare; ExecQuery; if (RecordCount <> 0) then begin CodigoPedido := FieldByName('CODIGO').AsString; Situacion := FieldByName('SITUACION').AsString; Result := True end; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.DarSituacion(CodigoEmpresa: Integer; CodigoPedido: String): String; var oSQL : TIBSQL; begin Result := ''; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select SITUACION '); SQL.Add('from PEDIDOSPROVEEDOR '); SQL.Add('where CODIGO = :CODIGOPEDIDO'); SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; ParamByName('CODIGOPEDIDO').AsString := CodigoPedido; try Prepare; ExecQuery; Result := UpperCase(FieldByName('SITUACION').AsString); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.DevolverPedido(CodigoEmpresa : Integer; CodigoPedido, Fecha: String): boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update PEDIDOSPROVEEDOR '); SQL.Add('set SITUACION = ''Devuelto'', '); SQL.Add('FECHADEVOLUCION = :FECHADEVOLUCION '); SQL.Add('where CODIGO = :CODIGO '); SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); SQL.Add('and (UPPER(SITUACION) = ''TOTALMENTE RECIBIDO'') '); ParamByName('CODIGO').AsString := CodigoPedido; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; ParamByName('FECHADEVOLUCION').AsString := Fecha; try Prepare; ExecQuery; if RowsAffected <> 0 then Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.RecibirParcialmentePedido(CodigoEmpresa : Integer; CodigoPedido, Fecha: String): boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update PEDIDOSPROVEEDOR '); SQL.Add('set SITUACION = ''Parcialmente recibido'', '); SQL.Add('FECHARECEPCION = :FECHARECEPCION '); SQL.Add('where CODIGO = :CODIGO '); SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); SQL.Add('and (UPPER(SITUACION) in (''EMITIDO'', ''PARCIALMENTE RECIBIDO''))'); ParamByName('FECHARECEPCION').AsString := Fecha; ParamByName('CODIGO').AsString := CodigoPedido; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; if RowsAffected <> 0 then Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.RecibirTotalmentePedido(CodigoEmpresa : Integer; CodigoPedido, Fecha: String): boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update PEDIDOSPROVEEDOR '); SQL.Add('set SITUACION = ''Totalmente recibido'', '); SQL.Add('FECHARECEPCION = :FECHARECEPCION '); SQL.Add('where (CODIGO = :CODIGO) '); SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); SQL.Add('and (UPPER(SITUACION) in (''EMITIDO'',''PARCIALMENTE RECIBIDO''))'); ParamByName('FECHARECEPCION').AsString := Fecha; ParamByName('CODIGO').AsString := CodigoPedido; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; if RowsAffected <> 0 then Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.BloquearPedido(CodigoEmpresa : Integer; CodigoPedido, Fecha: String): boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update PEDIDOSPROVEEDOR '); SQL.Add('set FECHARECEPCION = :FECHARECEPCION '); SQL.Add('where (CODIGO = :CODIGO) '); SQL.Add('and (CODIGOEMPRESA = :CODIGOEMPRESA) '); SQL.Add('and (UPPER(SITUACION) in (''EMITIDO'',''PARCIALMENTE RECIBIDO'',''TOTALMENTE RECIBIDO''))'); ParamByName('CODIGO').AsString := CodigoPedido; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; ParamByName('FECHARECEPCION').AsString := Fecha; try Prepare; ExecQuery; if RowsAffected <> 0 then Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.PedidoFacturado(CodigoEmpresa : Integer; CodigoPedido: String): boolean; var oSQL : TIBSQL; begin Result := False; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGOFACTURA '); SQL.Add('from PEDIDOSPROVEEDOR '); SQL.Add('where (CODIGO = :CODIGO) and (CODIGOEMPRESA = :CODIGOEMPRESA) '); ParamByName('CODIGO').AsString := CodigoPedido; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; Result := not EsCadenaVacia(FieldByName('CODIGOFACTURA').AsString); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidosProveedor.DarListaAnos(CodigoEmpresa : Integer): TStringList; var oSQL : TIBSQL; Lista : TStringList; begin Lista := TStringList.Create; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select distinct (EXTRACT (YEAR FROM FECHAALTA)) ANO '); SQL.Add('from PEDIDOSPROVEEDOR '); SQL.Add('where (CODIGOEMPRESA = :CODIGOEMPRESA) '); SQL.Add('order by FECHAALTA desc'); ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; try Prepare; ExecQuery; Lista.Add(CTE_TODOS); while not EOF do begin Lista.Add(Fields[0].AsString); Next; end; result := Lista; finally Close; Transaction := NIL; Free; end; end; end; end.