{ =============================================================================== Copyright (©) 2005. 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: 08-06-2005 Versión actual: 1.0.0 Fecha versión actual: 08-06-2005 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit TablaPedidos; interface uses //Generales SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB, //Particulares Contnrs, //Aplicacion Framework, StrFunc, Entidades, Constantes, BaseDatos, //Contador Contadores, RdxGestorContadores; type TDatosPedido = class(TObjeto) public CodigoContrato : String; Codigo : String; FechaAlta : String; Usuario : String; Referencia : String; Descripcion : String; CodigoProv : String; NombreProv : String; Telefono1 : String; Telefono2 : String; Movil1 : String; Movil2 : String; Fax : String; Correo : String; PersonaContacto : String; constructor Create; overload; constructor Create(CodigoObra, Codigo : String); overload; procedure ObtenerDatos; override; destructor Destroy; override; end; TListaPedidos = class(TPersistent) private FLista : TObjectList; FCodigoContrato : String; function GetCount : Integer; function GetPedido(Index: Integer): TDatosPedido; protected procedure ObtenerLista; virtual; public constructor Create(CodigoContrato : String); destructor Destroy; override; property Count : Integer read GetCount; property Pedido[Index: Integer] : TDatosPedido read GetPedido; end; type TdmTablaPedidos = class(TDataModule) private procedure IniciarSQL; public sqlInsertar : TStrings; sqlModificar : TStrings; sqlConsultar : TStrings; sqlEliminar : TStrings; sqlGrid : TStrings; constructor Create (AOwner : TComponent); override; destructor Destroy; override; function DarListaPedidos(CodigoContrato: Variant): TListaPedidos; procedure InicializarGridObras(var vGrid: TcxGridDBTableView); function ExisteCodigo(Codigo : String) : Boolean; function DarCodCliMin : String; function DarCodCliMax : String; function DarNombreCliMin : String; function DarNombreCliMax : String; end; var dmTablaPedidos: TdmTablaPedidos; implementation {$R *.DFM} uses IBErrorCodes, IB, Literales, Mensajes, Excepciones; constructor TdmTablaPedidos.Create (AOwner : TComponent); begin inherited; sqlInsertar := TStringList.Create; sqlModificar := TStringList.Create; sqlConsultar := TStringList.Create; sqlEliminar := TStringList.Create; sqlGrid := TStringList.Create; IniciarSQL; end; destructor TdmTablaPedidos.Destroy; begin sqlInsertar.Free; sqlModificar.Free; sqlConsultar.Free; sqlEliminar.Free; sqlGrid.Free; inherited; end; procedure TdmTablaPedidos.IniciarSQL; begin with sqlInsertar do begin Add('INSERT INTO OBRASPEDIDOS ('); Add('CODIGOCONTRATO, CODIGO, FECHAALTA, '); Add('USUARIO, DESCRIPCION, REFERENCIA, CODIGOPROV, NOMBREPROV, '); Add('TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX, CORREO, PERSONACONTACTO)'); Add('VALUES (:CODIGOCONTRATO, :CODIGO,'); Add(':FECHAALTA, :USUARIO, :DESCRIPCION, :REFERENCIA, :CODIGOPROV, :NOMBREPROV, '); Add(':TELEFONO1, :TELEFONO2, :MOVIL1, :MOVIL2, :FAX, :CORREO, :PERSONACONTACTO)'); end; with sqlModificar do begin Add('UPDATE OBRASPEDIDOS SET'); Add('DESCRIPCION = :DESCRIPCION,'); Add('REFERENCIA = :REFERENCIA,'); Add('CODIGOPROV = :CODIGOPROV,'); Add('NOMBREPROV = :NOMBREPROV,'); Add('TELEFONO1 = :TELEFONO1,'); Add('TELEFONO2 = :TELEFONO2,'); Add('MOVIL1 = :MOVIL1,'); Add('MOVIL2 = :MOVIL2,'); Add('FAX = :FAX,'); Add('CORREO = :CORREO,'); Add('PERSONACONTACTO = :PERSONACONTACTO'); Add('WHERE (CODIGOCONTRATO = :CODIGOCONTRATO) AND '); Add('(CODIGO = :CODIGO)'); end; with sqlEliminar do begin Add('delete from OBRASPEDIDOS '); Add('WHERE (CODIGOCONTRATO = :CODIGOCONTRATO) AND '); Add('(CODIGO = :CODIGO)'); end; with sqlConsultar do begin Add('select CODIGOCONTRATO, CODIGO, FECHAALTA, '); Add('USUARIO, DESCRIPCION, REFERENCIA, CODIGOPROV, NOMBREPROV, '); Add('TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX, CORREO, PERSONACONTACTO'); Add('from OBRASPEDIDOS'); Add('WHERE (CODIGOCONTRATO = :CODIGOCONTRATO) AND '); Add('(CODIGO = :CODIGO)'); end; with sqlGrid do begin Add('select CODIGOCONTRATO, CODIGO, FECHAALTA, '); Add('USUARIO, DESCRIPCION, REFERENCIA, CODIGOPROV, NOMBREPROV, '); Add('TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX, CORREO, PERSONACONTACTO'); Add('from OBRASPEDIDOS'); Add('WHERE (CODIGOCONTRATO = :CODIGOCONTRATO)'); end; end; function TdmTablaPedidos.ExisteCodigo(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 CLIENTES '); SQL.Add('where CODIGO = :CODIGO'); ParamByName('CODIGO').AsString := Codigo; try Prepare; ExecQuery; Contador := Fields[0].AsString; Result := (Codigo = Contador); finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaPedidos.InicializarGridObras (var vGrid: TcxGridDBTableView); var Columna : TcxGridDBColumn; begin with vGrid do begin OptionsView.Footer := True; {Columna CODIGOCONTRATO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOCONTRATO'; 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 obras'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; Columna.SortOrder := soAscending; {Columna TELEFONO 1} Columna := CreateColumn; Columna.DataBinding.FieldName := 'TELEFONO1'; Columna.Caption := 'Teléfono 1'; Columna.Width := tamColTelefono; Columna.Options.Filtering := False; {Columna MOVIL 1} Columna := CreateColumn; Columna.DataBinding.FieldName := 'MOVIL1'; Columna.Caption := 'Móvil 1'; Columna.Width := tamColTelefono; Columna.Options.Filtering := False; {Columna FAX} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FAX'; Columna.Caption := 'Fax'; Columna.Width := tamColTelefono; Columna.Options.Filtering := False; end; end; function TdmTablaPedidos.DarCodCliMax: String; var oSQL : TIBSQL; begin Result := ''; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select max(CODIGO) '); SQL.Add('from CLIENTES '); try Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidos.DarCodCliMin: String; var oSQL : TIBSQL; begin Result := ''; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select min(CODIGO) '); SQL.Add('from CLIENTES '); try Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; { TDatosPedido } constructor TDatosPedido.Create(CodigoObra, Codigo: String); begin inherited Create; CodigoContrato := CodigoObra; Codigo := Codigo; // Recuperar los datos ObtenerDatos; end; constructor TDatosPedido.Create; begin inherited Create; end; destructor TDatosPedido.Destroy; begin inherited; end; procedure TDatosPedido.ObtenerDatos; var oSQL : TIBSQL; begin if EsCadenaVacia(CodigoContrato) and EsCadenaVacia(Codigo) then raise Exception.Create(msgObrFaltaObr); oSQL := TIBSQL.Create(NIL); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGOCONTRATO, CODIGO, FECHAALTA, USUARIO,'); SQL.Add('DESCRIPCION, REFERENCIA, CODIGOPROV, NOMBREPROV,'); SQL.Add('TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX,'); SQL.Add('CORREO, PERSONACONTACTO'); SQL.Add('from OBRASPEDIDOS'); SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO'); SQL.Add('and CODIGO = :CODIGO'); ParamByName('CODIGOCONTRATO').AsString := CodigoContrato; ParamByName('CODIGO').AsString := CODIGO; try Prepare; ExecQuery; // Compruebo si se han recuperado datos if (RecordCount > 0) then begin CodigoContrato := FieldByName('CODIGOCONTRATO').AsString; Codigo := FieldByName('CODIGO').AsString; FechaAlta := FieldByName('FECHAALTA').AsString; Usuario := FieldByName('USUARIO').AsString; Referencia := FieldByName('REFERENCIA').AsString; Descripcion := FieldByName('DESCRIPCION').AsString; CodigoProv := FieldByName('CODIGOPROV').AsString; NombreProv := FieldByName('NOMBREPROV').AsString; Telefono1 := FieldByName('TELEFONO1').AsString; Telefono2 := FieldByName('TELEFONO2').AsString; Movil1 := FieldByName('MOVIL1').AsString; Movil2 := FieldByName('MOVIL2').AsString; Fax := FieldByName('FAX').AsString; Correo := FieldByName('CORREO').AsString; PersonaContacto := FieldByName('PERSONACONTACTO').AsString; end; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidos.DarNombreCliMax: String; var oSQL : TIBSQL; begin Result := ''; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select max(NOMBRE) '); SQL.Add('from CLIENTES '); try Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidos.DarNombreCliMin: String; var oSQL : TIBSQL; begin Result := ''; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select min(NOMBRE) '); SQL.Add('from CLIENTES '); try Prepare; ExecQuery; Result := Fields[0].AsString; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPedidos.DarListaPedidos(CodigoContrato: Variant): TListaPedidos; var oSQL : TIBSQL; begin if EsCadenaVacia(CodigoContrato) then raise Exception.Create(msgObrFaltaObr); Result := TListaPedidos.Create(CodigoContrato); end; { TListaPedidos } constructor TListaPedidos.Create(CodigoContrato: String); begin FCodigoContrato := CodigoContrato; FLista := TObjectList.Create; ObtenerLista; end; destructor TListaPedidos.Destroy; begin FLista.Free; FLista := NIL; inherited; end; function TListaPedidos.GetCount: Integer; begin Result := FLista.Count; end; function TListaPedidos.GetPedido(Index: Integer): TDatosPedido; begin Result := TDatosPedido(FLista.Items[Index]); end; procedure TListaPedidos.ObtenerLista; var oSQL : TIBSQL; Pedido : TDatosPedido; begin oSQL := TIBSQL.Create(nil); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGOCONTRATO, CODIGO, FECHAALTA, USUARIO,'); SQL.Add('DESCRIPCION, REFERENCIA, CODIGOPROV, NOMBREPROV,'); SQL.Add('TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX,'); SQL.Add('CORREO, PERSONACONTACTO'); SQL.Add('from OBRASPEDIDOS'); SQL.Add('where CODIGOCONTRATO = :CODIGOCONTRATO'); SQL.Add('order by CODIGO'); try ParamByName('CODIGOCONTRATO').AsString := FCodigoContrato; Prepare; ExecQuery; while not EOF do begin Pedido := TDatosPedido.Create; with Pedido do begin CodigoContrato := FieldByName('CODIGOCONTRATO').AsString; Codigo := FieldByName('CODIGO').AsString; FechaAlta := FieldByName('FECHAALTA').AsString; Usuario := FieldByName('USUARIO').AsString; Referencia := FieldByName('REFERENCIA').AsString; Descripcion := FieldByName('DESCRIPCION').AsString; CodigoProv := FieldByName('CODIGOPROV').AsString; NombreProv := FieldByName('NOMBREPROV').AsString; Telefono1 := FieldByName('TELEFONO1').AsString; Telefono2 := FieldByName('TELEFONO2').AsString; Movil1 := FieldByName('MOVIL1').AsString; Movil2 := FieldByName('MOVIL2').AsString; Fax := FieldByName('FAX').AsString; Correo := FieldByName('CORREO').AsString; PersonaContacto := FieldByName('PERSONACONTACTO').AsString; end; FLista.Add(Pedido); Next; end; finally Close; Transaction := NIL; Free; end; end; end; end.