This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
Miguelo_FactuGES/BaseDatos/TablaArticulos.pas
2007-06-25 15:19:31 +00:00

742 lines
19 KiB
ObjectPascal

{
===============================================================================
Copyright (©) 2002. 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-12-2002
Versión actual: 1.0.1
Fecha versión actual: 02-02-2004
===============================================================================
Modificaciones:
Fecha Comentarios
---------------------------------------------------------------------------
02-02-2004 Se ha adaptado a los nuevos contadores
===============================================================================
}
unit TablaArticulos;
interface
uses
//Generales
SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB,
//Particulares
TablaPropiedadesArticulo, TablaPropiedades,
//Aplicacion
Framework, StrFunc, Entidades, Constantes, BaseDatos,
// Contador
Contadores, RdxGestorContadores;
type
TDatosArticuloModelo = class(TObjeto)
private
FListaPropiedades : TListaPropiedades;
protected
procedure ObtenerDatos; override;
procedure AssignTo(Dest: TPersistent); override;
public
Codigo : String;
Familia : Variant;
Descripcion : String;
constructor Create(Familia : Integer); overload;
constructor Create(Codigo : String); overload; virtual;
constructor Create; overload; override;
destructor Destroy; override;
property ListaPropiedades : TListaPropiedades read FListaPropiedades;
end;
TDatosArticulo = class(TDatosArticuloModelo)
protected
procedure ObtenerDatos; override;
public
// ¡¡ REVISAR !!
Unidadesmedida : String;
Precio : String;
Observaciones : String;
Existencias : String;
StockMin : String;
StockMax : String;
CodigoAlmacen : Variant;
constructor Create(Codigo : String); overload; override;
end;
TDatosArticuloAlmacen = class(TPersistent)
public
Codigo : String;
Unidadesmedida : String;
Precio : String;
TipoOperacion : String;
TipoMovimiento : String;
Causa : String;
Existencias : String;
StockMin : String;
StockMax : String;
CodigoAlmacen : Variant;
NombreCliente : String;
end;
/////////////////////////////////////////////////////////////////////////////////
type
TdmTablaArticulos = class(TDataModule)
private
FArtModelo : TRdxEntidad;
procedure IniciarSQL;
public
sqlInsertar : TStrings;
sqlModificar : TStrings;
sqlConsultar : TStrings;
sqlEliminar : TStrings;
sqlGrid : TStrings;
sqlInsertarArtModelo : TStrings;
sqlModificarArtModelo : TStrings;
sqlConsultarArtModelo : TStrings;
sqlEliminarArtModelo : TStrings;
sqlGridArtModelo : TStrings;
//Metodos que llamaran a contador de articulo y articulo modelo dependiendo de
//la propiedad FArtModelo
function DarNuevoCodigo : String;
function InsertarContador : boolean;
function IncrementarCodigo : boolean;
function ValidarCodigo(Codigo : String) : Boolean;
function FormatearCodigo(Codigo : String) : String;
function ExisteCodigo(CodigoArticulo : String) : Boolean;
function ExisteCodigoArt(CodigoArticulo : String) : Boolean;
function ExisteCodigoArtModelo(CodigoArticulo : String) : Boolean;
function DarDatosArticulo(var Datos: TDatosArticulo): Boolean;
function DarDatosArticuloArt(var Datos: TDatosArticulo): Boolean;
function DarDatosArticuloArtModelo(var Datos: TDatosArticulo): Boolean;
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
procedure InicializarGridArticulos(var vGrid: TcxGridDBTableView);
procedure InicializarTablaArticulos(Tabla : TPTabla);
property ArtModelo : TRdxEntidad read FArtModelo write FArtModelo;
function DarArticuloMin : String;
function DarArticuloMax : String;
end;
var
dmTablaArticulos: TdmTablaArticulos;
implementation
{$R *.DFM}
uses
Mensajes, Literales;
constructor TdmTablaArticulos.Create (AOwner : TComponent);
begin
inherited;
sqlInsertar := TStringList.Create;
sqlModificar := TStringList.Create;
sqlConsultar := TStringList.Create;
sqlEliminar := TStringList.Create;
sqlGrid := TStringList.Create;
sqlInsertarArtModelo := TStringList.Create;
sqlModificarArtModelo := TStringList.Create;
sqlConsultarArtModelo := TStringList.Create;
sqlEliminarArtModelo := TStringList.Create;
sqlGridArtModelo := TStringList.Create;
IniciarSQL;
FArtModelo := entArticuloModelo;
end;
destructor TdmTablaArticulos.Destroy;
begin
sqlInsertar.Free;
sqlModificar.Free;
sqlConsultar.Free;
sqlEliminar.Free;
sqlGrid.Free;
sqlInsertarArtModelo.Free;
sqlModificarArtModelo.Free;
sqlConsultarArtModelo.Free;
sqlEliminarArtModelo.Free;
sqlGridArtModelo.Free;
inherited;
end;
procedure TdmTablaArticulos.IniciarSQL;
begin
//Articulos
with sqlInsertar do
begin
Add('insert into ARTICULOS (');
Add('CODIGO, FECHAALTA, USUARIO, FAMILIA, DESCRIPCION) ');
Add('values (:CODIGO, :FECHAALTA, :USUARIO, :FAMILIA, :DESCRIPCION)');
end;
with sqlModificar do
begin
Add('update ARTICULOS set ');
Add('FAMILIA = :FAMILIA, ');
Add('DESCRIPCION = :DESCRIPCION ');
Add('where (CODIGO = :CODIGO)');
end;
with sqlEliminar do
begin
Add('delete from ARTICULOS ');
Add('where CODIGO = :CODIGO');
end;
with sqlConsultar do
begin
Add('select * from ARTICULOS ');
Add('where CODIGO = :CODIGO');
end;
with sqlGrid do
begin
Add('select ARTICULOS.CODIGO, FAMILIAS.DESCRIPCION as FAMILIA, ARTICULOS.DESCRIPCION ');
Add('from ARTICULOS, FAMILIAS ');
Add('where FAMILIAS.CODIGO = ARTICULOS.FAMILIA ');
Add('order by ARTICULOS.DESCRIPCION');
end;
//Articulos Modelo
with sqlInsertarArtModelo do
begin
Add('insert into ARTICULOSMODELO (');
Add('CODIGO, FECHAALTA, USUARIO, FAMILIA, DESCRIPCION) ');
Add('values (:CODIGO, :FECHAALTA, :USUARIO, :FAMILIA, :DESCRIPCION)');
end;
with sqlModificarArtModelo do
begin
Add('update ARTICULOSMODELO set ');
Add('FAMILIA = :FAMILIA, ');
Add('DESCRIPCION = :DESCRIPCION ');
Add('where (CODIGO = :CODIGO)');
end;
with sqlEliminarArtModelo do
begin
Add('delete from ARTICULOSMODELO ');
Add('where CODIGO = :CODIGO');
end;
with sqlConsultarArtModelo do
begin
Add('select * from ARTICULOSMODELO ');
Add('where CODIGO = :CODIGO');
end;
with sqlGridArtModelo do
begin
Add('select CODIGO, FAMILIA, DESCRIPCION ');
Add('from ARTICULOSMODELO ');
Add('order by DESCRIPCION');
end;
end;
function TdmTablaArticulos.darNuevoCodigo : String;
begin
case FArtModelo of
entArticulo: Result := GestorContadores.darNuevoCodigo(contArticulos);
entArticuloModelo: Result := GestorContadores.darNuevoCodigo(contArticulosModelo);
else Result := GestorContadores.darNuevoCodigo(contArticulos);
end;
end;
function TdmTablaArticulos.IncrementarCodigo: boolean;
begin
case FArtModelo of
entArticulo: Result := GestorContadores.IncrementarValor(contArticulos);
entArticuloModelo: Result := GestorContadores.IncrementarValor(contArticulosModelo);
else Result := GestorContadores.IncrementarValor(contArticulos);
end;
end;
function TdmTablaArticulos.validarCodigo(Codigo : String) : Boolean;
begin
case FArtModelo of
entArticulo: Result := GestorContadores.ValidarCodigo(contArticulos, Codigo);
entArticuloModelo: Result := GestorContadores.ValidarCodigo(contArticulosModelo, Codigo);
else Result := GestorContadores.ValidarCodigo(contArticulos, Codigo);
end;
end;
function TdmTablaArticulos.formatearCodigo(Codigo : String) : String;
begin
case FArtModelo of
entArticulo: Result := GestorContadores.formatearCodigo(contArticulos, Codigo);
entArticuloModelo: Result := GestorContadores.formatearCodigo(contArticulosModelo, Codigo);
else Result := GestorContadores.formatearCodigo(contArticulos, Codigo);
end;
end;
function TdmTablaArticulos.insertarContador: boolean;
begin
case FArtModelo of
entArticulo: Result := GestorContadores.InsertarContador(contArticulos);
entArticuloModelo: Result := GestorContadores.InsertarContador(contArticulosModelo);
else Result := GestorContadores.InsertarContador(contArticulos);
end;
end;
function TdmTablaArticulos.ExisteCodigoArt(CodigoArticulo: String): Boolean;
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 CODIGO ');
SQL.Add('from ARTICULOS ');
SQL.Add('where CODIGO = :CODIGO ');
try
ParamByName('CODIGO').AsString := CodigoArticulo;
Prepare;
ExecQuery;
Codigo := FieldByName('CODIGO').AsString;
Result := (CodigoArticulo = Codigo);
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulos.DarDatosArticuloArt(var Datos: TDatosArticulo): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
if EsCadenaVacia(Datos.Codigo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select * from ARTICULOS ');
SQL.Add('where CODIGO = :CODIGO');
try
ParamByName('CODIGO').AsString := Datos.Codigo;
Prepare;
ExecQuery;
if (RecordCount > 0) then
begin
with Datos do
begin
Familia := FieldByName('FAMILIA').AsVariant;
Descripcion := FieldByName('DESCRIPCION').AsString;
{Close;
SQL.Clear;
SQL.Add('select * from PROPIEDADESARTICULOS ');
SQL.Add('where CODIGOARTICULO = :CODIGO');
ParamByName('CODIGO').AsString := Datos.Codigo;
Prepare;
ExecQuery;}
Result := True;
end;
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
procedure TdmTablaArticulos.InicializarGridArticulos(var vGrid: TcxGridDBTableView);
var
Columna : TcxGridDBColumn;
begin
with vGrid do begin
ClearItems;
OptionsView.Footer := True;
{Columna CODIGO}
Columna := CreateColumn;
Columna.DataBinding.FieldName := 'CODIGO';
Columna.Caption := 'Código';
Columna.Width := tamColCodigo;
Columna.Options.Filtering := False;
with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do
try
try
BeginUpdate;
Column := Columna;
FieldName := Columna.DataBinding.FieldName;
Format := 'Total: 0 artículos';
Kind := skCount;
finally
EndUpdate;
end;
except
DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1);
end;
{Columna FAMILIA}
Columna := CreateColumn;
Columna.DataBinding.FieldName := 'FAMILIA';
Columna.Caption := 'Familia';
Columna.Width := tamColFamilia;
Columna.Options.Filtering := False;
{Columna DESCRIPCION}
Columna := CreateColumn;
Columna.DataBinding.FieldName := 'DESCRIPCION';
Columna.Caption := 'Descripción';
Columna.Width := tamColNombre;
Columna.Options.Filtering := False;
Columna.SortOrder := soAscending;
end;
end;
{ TDatosArticuloModelo }
constructor TDatosArticuloModelo.Create(Codigo: String);
begin
inherited Create;
Self.Codigo := Codigo;
// Recuperar los datos del artículo
ObtenerDatos;
// Recuperar la lista de propiedades del artículo
FListaPropiedades := TListaPropiedadesArtModelo.Create(Codigo);
end;
constructor TDatosArticuloModelo.Create(Familia : Integer);
begin
inherited Create;
Self.Familia := Familia;
// Recuperar los datos del artículo
ObtenerDatos;
// Recuperar la lista de propiedades del artículo
FListaPropiedades := TListaPropiedadesArtModelo.Create(Codigo);
end;
procedure TDatosArticuloModelo.AssignTo(Dest: TPersistent);
begin
if not (Dest is TDatosArticulo) then
AssignError(Dest);
(Dest as TDatosArticulo).Codigo := Codigo;
(Dest as TDatosArticulo).Descripcion := Descripcion;
(Dest as TDatosArticulo).Familia := Familia;
(Dest as TDatosArticulo).ListaPropiedades.Assign(ListaPropiedades);
end;
constructor TDatosArticuloModelo.Create;
begin
inherited Create;
Codigo := '';
FListaPropiedades := TListaPropiedadesArtModelo.Create;
end;
destructor TDatosArticuloModelo.Destroy;
begin
FListaPropiedades.Free;
FListaPropiedades := NIL;
inherited;
end;
procedure TDatosArticuloModelo.ObtenerDatos;
var
oSQL : TIBSQL;
begin
if EsCadenaVacia(Codigo) and EsCadenaVacia(Familia) then
raise Exception.Create(msgDatosCodArtNoExiste);
oSQL := TIBSQL.Create(nil);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select * from ARTICULOSMODELO ');
if not EsCadenaVacia(Codigo) then begin
SQL.Add('where CODIGO = :CODIGO');
ParamByName('CODIGO').AsString := Codigo;
end
else begin
SQL.Add('where FAMILIA = :FAMILIA');
ParamByName('FAMILIA').AsInteger := Familia;
end;
try
Prepare;
ExecQuery;
if (RecordCount > 0) then
begin
Codigo := FieldByName('CODIGO').AsString;
Familia := FieldByName('FAMILIA').AsVariant;
Descripcion := FieldByName('DESCRIPCION').AsString;
end
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
{ TDatosArticulo }
constructor TDatosArticulo.Create(Codigo: String);
begin
inherited Create;
Self.Codigo := Codigo;
// Recuperar los datos del artículo
ObtenerDatos;
// Recuperar la lista de propiedades del artículo
FListaPropiedades := TListaPropiedadesArticulo.Create(Codigo);
end;
procedure TDatosArticulo.ObtenerDatos;
var
oSQL : TIBSQL;
begin
if EsCadenaVacia(Codigo) then
raise Exception.Create(msgDatosCodArtNoExiste);
oSQL := TIBSQL.Create(nil);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select * from ARTICULOS ');
SQL.Add('where CODIGO = :CODIGO');
try
ParamByName('CODIGO').AsString := Codigo;
Prepare;
ExecQuery;
if (RecordCount > 0) then
begin
Familia := FieldByName('FAMILIA').AsString;
Descripcion := FieldByName('DESCRIPCION').AsString;
{Unidadesmedida := FieldByName('UNIDADESMEDIDA').AsString;
Precio := FieldByName('PRECIO').AsString;
Observaciones := FieldByName('OBSERVACIONES').AsString;}
//Inicializamos el resto de campos
Existencias := '0';
StockMin := '0';
StockMax := '1000';
end
else begin
raise Exception.CreateFmt(msgDatosNoExisteArt, [Codigo]);
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulos.DarDatosArticuloArtModelo(var Datos: TDatosArticulo): Boolean;
var
oSQL : TIBSQL;
begin
Result := False;
if EsCadenaVacia(Datos.Codigo) then
Exit;
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select * from ARTICULOSMODELO ');
SQL.Add('where CODIGO = :CODIGO');
try
ParamByName('CODIGO').AsString := Datos.Codigo;
Prepare;
ExecQuery;
if (RecordCount > 0) then
begin
with Datos do
begin
Familia := FieldByName('FAMILIA').AsVariant;
Descripcion := FieldByName('DESCRIPCION').AsString;
SQL.Clear;
SQL.Add('select * from PROPIEDADESARTICULOSMODELO ');
SQL.Add('where CODIGOARTICULO = :CODIGO');
ParamByName('CODIGO').AsString := Datos.Codigo;
Prepare;
ExecQuery;
if (RecordCount = 0) then
begin
verMensaje('No tiene propiedades');
end
else
begin
verMensaje('Tiene propiedades');
end;
Result := True;
end;
end;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulos.ExisteCodigoArtModelo(CodigoArticulo: String): Boolean;
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 CODIGO ');
SQL.Add('from ARTICULOSMODELO ');
SQL.Add('where CODIGO = :CODIGO ');
try
ParamByName('CODIGO').AsString := CodigoArticulo;
Prepare;
ExecQuery;
Codigo := FieldByName('CODIGO').AsString;
Result := (CodigoArticulo = Codigo);
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulos.ExisteCodigo(CodigoArticulo: String): Boolean;
begin
case FArtModelo of
entArticulo: Result := ExisteCodigoArt(CodigoArticulo);
entArticuloModelo: Result := ExisteCodigoArtModelo(CodigoArticulo);
end;
end;
function TdmTablaArticulos.DarDatosArticulo(var Datos: TDatosArticulo): Boolean;
begin
case FArtModelo of
entArticulo: Result := DarDatosArticuloArt(Datos);
entArticuloModelo: Result := DarDatosArticuloArtModelo(Datos);
end;
end;
procedure TdmTablaArticulos.InicializarTablaArticulos(Tabla: TPTabla);
begin
with Tabla^.Fields do
begin
{with (FieldByName('PRECIO') as TFloatField) do begin
DisplayFormat := DISPLAY_EUROS2;
EditFormat := EDIT_EUROS2;
end;}
end;
end;
function TdmTablaArticulos.DarArticuloMax: String;
var
oSQL : TIBSQL;
begin
Result := '';
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select max(DESCRIPCION) from ARTICULOS ');
try
Prepare;
ExecQuery;
Result := Fields[0].AsString;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
function TdmTablaArticulos.DarArticuloMin: String;
var
oSQL : TIBSQL;
begin
Result := '';
oSQL := TIBSQL.Create(Self);
with oSQL do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SQL.Add('select min(DESCRIPCION) from ARTICULOS ');
try
Prepare;
ExecQuery;
Result := Fields[0].AsString;
finally
Close;
Transaction := NIL;
Free;
end;
end;
end;
end.