{ =============================================================================== 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: 03-11-2002 Versión actual: 1.0.0 Fecha versión actual: 03-11-2002 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit TablaEmpresas; interface uses //Generales SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB, //Particulares IBCustomDataSet, Graphics, IBQuery, //Aplicacion Framework, StrFunc, Entidades, Constantes, BaseDatos; type TDatosDireccionEmpresa = class(TObjeto) protected procedure ObtenerDatos; override; public CodigoEmpresa : Integer; CodigoDireccion : Integer; Calle : String; Numero : String; CodigoPostal : String; Poblacion : String; Provincia : String; Telefono : String; Fax : String; procedure SalvarDatos; procedure Eliminar; end; TListaDireccionesEmpresa = class(TListaObjetos) private FCodigoEmpresa : Integer; function GetDireccion(Index: Integer): TDatosDireccionEmpresa; protected procedure ObtenerLista; override; public property Items[Index: Integer] : TDatosDireccionEmpresa read GetDireccion; constructor Create(CodigoEmpresa : Integer); destructor Destroy; override; end; TDatosEmpresa = class(TObjeto) private FDirecciones : TListaDireccionesEmpresa; protected procedure ObtenerDatos; override; public Codigo : Integer; FechaAlta : String; Usuario : String; Nombre : String; NifCif : String; Correo : String; Web : String; NombreComercial : String; CodigoTrimestre : String; IvaDefecto : String; ValidezDefecto : Variant; IntervaloPagosCli : Real; LibroDefecto : String; Logotipo : TPicture; property Direcciones : TListaDireccionesEmpresa read FDirecciones; constructor Create; overload; constructor Create(CodigoEmpresa : Integer); overload; destructor Destroy; override; end; TdmTablaEmpresas = class(TDataModule) private procedure IniciarSQL; public sqlInsertar : TStrings; sqlModificar : TStrings; sqlConsultar : TStrings; sqlEliminar : TStrings; sqlGrid : TStrings; function DarNuevoCodigo : String; constructor Create (AOwner : TComponent); override; destructor Destroy; override; procedure InicializarGridEmpresas(var vGrid: TcxGridDBTableView); end; var dmTablaEmpresas: TdmTablaEmpresas; implementation {$R *.DFM} uses Literales; constructor TdmTablaEmpresas.Create (AOwner : TComponent); begin inherited; sqlInsertar := TStringList.Create; sqlModificar := TStringList.Create; sqlConsultar := TStringList.Create; sqlEliminar := TStringList.Create; sqlGrid := TStringList.Create; IniciarSQL; end; destructor TdmTablaEmpresas.Destroy; begin sqlInsertar.Free; sqlModificar.Free; sqlConsultar.Free; sqlEliminar.Free; sqlGrid.Free; inherited; end; procedure TdmTablaEmpresas.IniciarSQL; begin with sqlInsertar do begin Add('INSERT INTO EMPRESAS (CODIGO, FECHAALTA, USUARIO, NOMBRE, NIFCIF, '); Add('CORREO, WEB, LOGOTIPO, NOMBRECOMERCIAL, CODIGOTRIMESTRE, IVADEFECTO, '); Add('VALIDEZDEFECTO, INTERVALOPAGOSCLI, LIBRODEFECTO) '); Add('VALUES (:CODIGO, :FECHAALTA, :USUARIO, :NOMBRE, :NIFCIF, '); Add(':CORREO, :WEB, :LOGOTIPO, :NOMBRECOMERCIAL, :CODIGOTRIMESTRE, :IVADEFECTO, '); Add(':VALIDEZDEFECTO, :INTERVALOPAGOSCLI, :LIBRODEFECTO)'); end; with sqlModificar do begin Add('UPDATE EMPRESAS SET'); Add('NOMBRE = :NOMBRE, '); Add('NIFCIF = :NIFCIF, '); { Add('CALLE = :CALLE, '); Add('NUMERO = :NUMERO, '); Add('CODIGOPOSTAL = :CODIGOPOSTAL, '); Add('POBLACION = :POBLACION, '); Add('PROVINCIA = :PROVINCIA, '); Add('TELEFONO = :TELEFONO, '); Add('FAX = :FAX, ');} Add('CORREO = :CORREO, '); Add('WEB = :WEB, '); Add('LOGOTIPO = :LOGOTIPO, '); Add('NOMBRECOMERCIAL = :NOMBRECOMERCIAL, '); Add('CODIGOTRIMESTRE = :CODIGOTRIMESTRE, '); Add('IVADEFECTO = :IVADEFECTO, '); Add('VALIDEZDEFECTO = :VALIDEZDEFECTO, '); Add('INTERVALOPAGOSCLI = :INTERVALOPAGOSCLI, '); Add('LIBRODEFECTO = :LIBRODEFECTO '); Add('WHERE (CODIGO = :CODIGO)'); end; with sqlEliminar do begin Add('delete from EMPRESAS '); Add('where CODIGO = :CODIGO'); end; with sqlConsultar do begin Add('select * from EMPRESAS '); Add('where CODIGO = :CODIGO'); end; with sqlGrid do begin Add('select CODIGO, NIFCIF, LOGOTIPO, NOMBRECOMERCIAL'); Add('from EMPRESAS '); end; end; function TdmTablaEmpresas.DarNuevoCodigo : String; var oSQL : TIBSQL; begin Result := '0'; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select max(CODIGO) + 1 '); SQL.Add('from EMPRESAS '); try Prepare; ExecQuery; if not esCadenaVacia(Fields[0].AsString) then Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaEmpresas.InicializarGridEmpresas (var vGrid: TcxGridDBTableView); var Columna : TcxGridDBColumn; begin with vGrid do begin OptionsView.Footer := True; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; Columna.Visible := False; {Columna NIFCIF} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NIFCIF'; Columna.Caption := 'NIF/CIF'; Columna.Width := tamColNIFCIF; Columna.Options.Filtering := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: 0 empresas'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna NOMBRECOMERCIAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRECOMERCIAL'; Columna.Caption := 'Nombre comercial'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; Columna.SortOrder := soAscending; end; end; { TDatosEmpresa } constructor TDatosEmpresa.Create(CodigoEmpresa: Integer); begin inherited Create; Codigo := CodigoEmpresa; // Recuperar los datos de la empresa ObtenerDatos; end; constructor TDatosEmpresa.Create; begin inherited Create; FDirecciones := TListaDireccionesEmpresa.Create(Codigo); end; destructor TDatosEmpresa.Destroy; begin if Assigned(FDirecciones) then begin FDirecciones.Free; FDirecciones := NIL; end; inherited; end; procedure TDatosEmpresa.ObtenerDatos; var oSQL : TIBQuery; Stream : TIBDSBlobStream; begin if EsCadenaVacia(Codigo) then raise Exception.Create(msgCliFaltaCli); oSQL := TIBQuery.Create(dmTablaEmpresas); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select * '); SQL.Add('from EMPRESAS '); SQL.Add('where CODIGO = :CODIGO'); ParamByName('CODIGO').AsInteger := Codigo; try Prepare; Open; // Compruebo si se han recuperado datos if (RecordCount > 0) then begin Codigo := FieldByName('CODIGO').AsInteger; FechaAlta := FieldByName('FECHAALTA').AsString; Usuario := FieldByName('USUARIO').AsString; Nombre := FieldByName('NOMBRE').AsString; NifCif := FieldByName('NIFCIF').AsString; Correo := FieldByName('CORREO').AsString; Web := FieldByName('WEB').AsString; NombreComercial := FieldByName('NOMBRECOMERCIAL').AsString; CodigoTrimestre := FieldByName('CODIGOTRIMESTRE').AsString; IvaDefecto := FieldByName('IVADEFECTO').AsString; LibroDefecto := FieldByName('LIBRODEFECTO').AsString; ValidezDefecto := FieldByName('VALIDEZDEFECTO').AsString; IntervaloPagosCli := FieldByName('INTERVALOPAGOSCLI').AsFloat; //En el caso de que tenga logotipo asociado if not esCadenaVacia(FieldByName('LOGOTIPO').AsVariant) then begin Stream := (oSQL.CreateBlobStream(FieldByName('LOGOTIPO'), bmReadWrite) as TIBDSBlobStream); Logotipo := TPicture.Create; Logotipo.Bitmap.LoadFromStream(Stream); Stream.Free; end; FDirecciones := TListaDireccionesEmpresa.Create(Codigo); end; finally Close; Transaction := NIL; Free; end; end; end; { TDatosDireccionEmpresa } procedure TDatosDireccionEmpresa.Eliminar; var oSQL : TIBQuery; bEsInsercion : Boolean; begin if (EsCadenaVacia(CodigoEmpresa)) or (EsCadenaVacia(CodigoDireccion)) then raise Exception.CreateFmt(msgEmpFaltaAlgo, ['el código']); bEsInsercion := True; oSQL := TIBQuery.Create(nil); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; with SQL do begin Add('delete from SUCURSALESEMPRESA '); Add('where CODIGOEMPRESA = :CODIGOEMPRESA and '); Add('CODIGO = :CODIGO '); end; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; ParamByName('CODIGO').AsInteger := CodigoDireccion; try Prepare; ExecSQL; finally Close; Transaction := NIL; Free; end; end; end; procedure TDatosDireccionEmpresa.ObtenerDatos; begin inherited; // end; procedure TDatosDireccionEmpresa.SalvarDatos; var oSQL : TIBQuery; bEsInsercion : Boolean; begin if (EsCadenaVacia(CodigoEmpresa)) or (EsCadenaVacia(CodigoDireccion)) then raise Exception.CreateFmt(msgEmpFaltaAlgo, ['el código']); bEsInsercion := True; oSQL := TIBQuery.Create(nil); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; with SQL do begin Add('select CODIGO from SUCURSALESEMPRESA '); Add('where CODIGOEMPRESA = :CODIGOEMPRESA and '); Add('CODIGO = :CODIGO '); end; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; ParamByName('CODIGO').AsInteger := CodigoDireccion; try Prepare; Open; // Compruebo si se han recuperado datos if (RecordCount > 0) then bEsInsercion := False else bEsInsercion := True; finally Close; end; with SQL do begin Clear; if bEsInsercion then begin Add('insert into SUCURSALESEMPRESA ( '); Add('CODIGOEMPRESA, CODIGO, FECHAALTA, USUARIO, '); Add('CALLE, NUMERO, CODIGOPOSTAL, POBLACION, '); Add('PROVINCIA, TELEFONO, FAX) '); Add('values ( '); Add(':CODIGOEMPRESA, :CODIGO, CURRENT_DATE, '); Add('CURRENT_USER, :CALLE, :NUMERO, '); Add(':CODIGOPOSTAL, :POBLACION, :PROVINCIA, '); Add(':TELEFONO, :FAX) '); end else begin Add('update SUCURSALESEMPRESA set '); Add('CALLE = :CALLE, '); Add('NUMERO = :NUMERO, '); Add('CODIGOPOSTAL = :CODIGOPOSTAL, '); Add('POBLACION = :POBLACION, '); Add('PROVINCIA = :PROVINCIA, '); Add('TELEFONO = :TELEFONO, '); Add('FAX = :FAX '); Add('WHERE (CODIGOEMPRESA = :CODIGOEMPRESA) AND (CODIGO = :CODIGO) '); end; end; ParamByName('CODIGOEMPRESA').AsInteger := CodigoEmpresa; ParamByName('CODIGO').AsInteger := CodigoDireccion; ParamByName('CALLE').AsString := Calle; ParamByName('NUMERO').AsString := Numero; ParamByName('CODIGOPOSTAL').AsString := CodigoPostal; ParamByName('POBLACION').AsString := Poblacion; ParamByName('PROVINCIA').AsString := Provincia; ParamByName('TELEFONO').AsString := Telefono; ParamByName('FAX').AsString := Fax; try Prepare; ExecSQL; finally Close; Transaction := NIL; Free; end; end; end; { TListaDireccionesEmpresa } constructor TListaDireccionesEmpresa.Create(CodigoEmpresa: Integer); begin inherited Create; FCodigoEmpresa := CodigoEmpresa; ObtenerLista; end; destructor TListaDireccionesEmpresa.Destroy; begin inherited; end; function TListaDireccionesEmpresa.GetDireccion( Index: Integer): TDatosDireccionEmpresa; begin Result := TDatosDireccionEmpresa(FLista.Items[Index]); end; procedure TListaDireccionesEmpresa.ObtenerLista; var oSQL : TIBQuery; FDireccion : TDatosDireccionEmpresa; begin if EsCadenaVacia(FCodigoEmpresa) then raise Exception.CreateFmt(msgEmpFaltaAlgo, ['el código']); oSQL := TIBQuery.Create(nil); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO, CALLE, NUMERO, CODIGOPOSTAL, POBLACION, '); SQL.Add('PROVINCIA, TELEFONO, FAX '); SQL.Add('from SUCURSALESEMPRESA '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('order by CODIGO'); ParamByName('CODIGOEMPRESA').AsInteger := FCodigoEmpresa; try Prepare; Open; // Compruebo si se han recuperado datos while not EOF do begin FDireccion := TDatosDireccionEmpresa.Create; with FDireccion do begin CodigoEmpresa := FCodigoEmpresa; CodigoDireccion := FieldByName('CODIGO').AsInteger; Calle := FieldByName('CALLE').AsString; Numero := FieldByName('NUMERO').AsString; CodigoPostal := FieldByName('CODIGOPOSTAL').AsString; Poblacion := FieldByName('POBLACION').AsString; Provincia := FieldByName('PROVINCIA').AsString; Telefono := FieldByName('TELEFONO').AsString; Fax := FieldByName('FAX').AsString; end; Add(FDireccion); Next; end; finally Close; Free; end; end; end; end.