{ =============================================================================== 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: 05-12-2002 Versión actual: 1.0.1 Fecha versión actual: 02-02-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 02-02-2004 Se ha eliminado el atributo SERIE (P8 MULTIEMPRESA) Se ha adaptado a los nuevos contadores =============================================================================== } unit TablaFacturasProveedor; interface uses //Generales SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB, //Particulares IBCustomDataSet, cxGrid, cxGridCustomTableView, cxCurrencyEdit, //Aplicacion Framework, StrFunc, Entidades, Constantes, BaseDatos, RdxEmpresaActiva, //Contador Contadores, RdxGestorContadores; type TTipoFacturaProveedor = (tipTodas, tipGeneral, tipInmovilizado); TDatosFacturaProveedor = class(TObjeto) private // protected procedure ObtenerDatos; override; procedure AssignTo(Dest: TPersistent); override; public Codigo : String; Referencia : String; FechaAlta : TDateTime; Usuario : String; FechaFactura : TDateTime; FechaVencimiento : TDateTime; Situacion : String; Observaciones : String; CodigoProveedor : String; NIFCIF : String; Nombre : String; Calle : String; Numero : String; Piso : String; CodigoPostal : String; Poblacion : String; Provincia : String; Telefono1 : String; Telefono2 : String; Movil1 : String; Movil2 : String; Fax : String; PersonaContacto : String; FormaPago : String; BaseImponible : double; Descuento : integer; ImporteDescuento : double; Iva : integer; ImporteIva : double; ImporteTotal : double; TipoFactura : String; ClaseFactura : String; CodigoTrimestre : String; constructor Create(CodigoFactura : String); overload; constructor Create; overload; override; destructor Destroy; override; end; TListaFacturasProveedor = class(TListaObjetos) private FSQL : String; function GetFactura(Index: Integer): TDatosFacturaProveedor; protected procedure AssignTo(Dest: TPersistent); override; procedure ObtenerLista; override; public constructor Create(oSQL : String); overload; constructor Create; overload; override; property Items[Index: Integer] : TDatosFacturaProveedor read GetFactura; end; ///////////////////////////////////////////////////////////////////////////////// TdmTablaFacturasProveedor = class(TComponent) private procedure IniciarSQLFactura; procedure IniciarSQLDetalles; procedure IniciarSQLGrids; public sqlInsertarFactura : TStrings; sqlModificarFactura : TStrings; sqlConsultarFactura : TStrings; sqlEliminarFactura : TStrings; sqlConsultarGridFacturas : TStrings; sqlConsultarGridFacturasProv : TStrings; sqlConsultarTiposFactura : TStrings; sqlConsultarGridFacturasTrimestre : TStrings; sqlConsultarGridFacturasProvContrato : TStrings; sqlInsertarDetalles : TStrings; sqlModificarDetalles : TStrings; sqlConsultarDetalles : TStrings; sqlEliminarDetalles : TStrings; sqlConsultarGridDetalles : TStrings; //Metodos que llamaran a contador function DarNuevoCodigo : String; function IncrementarCodigo : boolean; function InsertarContador : boolean; function ValidarCodigo(Codigo : String) : Boolean; function FormatearCodigo(Codigo : String) : String; function ExisteFacturaConContrato(CodigoContrato : String) : Boolean; function FormatearNumConcepto(NumConcepto : String) : String; function ExisteCodigo(Codigo : String) : Boolean; constructor Create (AOwner : TComponent); override; destructor Destroy; override; procedure InicializarGridDetalles(var Grid: TcxGridDBTableView); procedure InicializarGridFacturas(var Grid: TcxGrid); procedure InicializarGridFacturasPendientes(var Grid: TcxGrid); procedure InicializarGridFacturasTrimestre(var Grid: TcxGrid); procedure InicializarGridFacturasProvContrato(var Grid: TcxGrid); procedure InicializarTablaFacturas(Tabla: TPTabla); procedure InicializarTablaDetalles(Tabla: TPTabla); function DarSituaciones : TStrings; function ModificarSituacionFactura(Codigo, Situacion, FormaPago : String): Boolean; //Trimestres function DarIvas : TStrings; function DarTiposOp : TStrings; function DarTiposOpDes : TStrings; function DarTiposOpDesTrimestral(var ListaCodigos: TStrings): TStrings; function ComprobarTrimestreFactura(CodigoFactura: String): Boolean; function AsignarTrimestre(CodigoFactura: String; CodigoTrimestre: String): Boolean; function ModificarSituacionFacturas(Codigos: TStrings; Situacion: String): Boolean; end; var dmTablaFacturasProveedor: TdmTablaFacturasProveedor; implementation uses Literales, TablaEmpresas; { TdmTablaFacturasProveedor } constructor TdmTablaFacturasProveedor.Create(AOwner: TComponent); begin inherited; { Cabecera } sqlInsertarFactura := TStringList.Create; sqlModificarFactura := TStringList.Create; sqlConsultarFactura := TStringList.Create; sqlEliminarFactura := TStringList.Create; { Detalles } sqlInsertarDetalles := TStringList.Create; sqlModificarDetalles := TStringList.Create; sqlConsultarDetalles := TStringList.Create; sqlEliminarDetalles := TStringList.Create; { Grids } sqlConsultarGridFacturas := TStringList.Create; sqlConsultarGridFacturasProv := TStringList.Create; sqlConsultarGridDetalles := TStringList.Create; sqlConsultarTiposFactura := TStringList.Create; sqlConsultarGridFacturasTrimestre := TStringList.Create; sqlConsultarGridFacturasProvContrato := TStringList.Create; IniciarSQLFactura; IniciarSQLDetalles; IniciarSQLGrids; end; destructor TdmTablaFacturasProveedor.Destroy; begin { Cabecera } sqlInsertarFactura.Free; sqlModificarFactura.Free; sqlConsultarFactura.Free; sqlEliminarFactura.Free; { Detalles } sqlInsertarDetalles.Free; sqlModificarDetalles.Free; sqlConsultarDetalles.Free; sqlEliminarDetalles.Free; { Grids } sqlConsultarGridFacturas.Free; sqlConsultarGridFacturasProv.Free; sqlConsultarGridDetalles.Free; sqlConsultarTiposFactura.Free; sqlConsultarGridFacturasTrimestre.Free; sqlConsultarGridFacturasProvContrato.Free; inherited; end; function TdmTablaFacturasProveedor.DarNuevoCodigo: String; begin Result := GestorContadores.darNuevoCodigo(contFacturasProveedor); end; function TdmTablaFacturasProveedor.DarSituaciones: TStrings; var Lista : TStringList; begin Result := NIL; Lista := TStringList.Create; with Lista do begin Clear; Append('PENDIENTE'); Append('PAGADA'); end; Result := Lista; end; function TdmTablaFacturasProveedor.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 FACTURASPROVEEDOR '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add('and CODIGO = :CODIGO'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := Codigo; try Prepare; ExecQuery; Contador := Fields[0].AsString; Result := (Codigo = Contador); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasProveedor.FormatearCodigo(Codigo: String): String; begin Result := GestorContadores.FormatearCodigo(contFacturasProveedor, Codigo); end; function TdmTablaFacturasProveedor.FormatearNumConcepto( NumConcepto: String): String; var Concepto : Integer; begin Concepto := StrToInt(NumConcepto); Result := format('%.10d', [Concepto]); end; function TdmTablaFacturasProveedor.IncrementarCodigo: boolean; begin Result := GestorContadores.IncrementarValor(contFacturasProveedor); end; procedure TdmTablaFacturasProveedor.InicializarGridDetalles(var Grid: TcxGridDBTableView); var Columna : TcxGridDBColumn; begin with Grid do begin OptionsView.Footer := True; {Columna CODIGOEMPRESA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOEMPRESA'; Columna.Visible := False; Columna.Options.Filtering := False; Columna.Options.Sorting := False; {Columna CODIGOFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOFACTURA'; Columna.Visible := False; Columna.Options.Filtering := False; Columna.Options.Sorting := False; {Columna CODIGOCONTRATO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOCONTRATO'; Columna.Caption := 'Cód. contrato'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.Options.Editing := False; {Columna.PropertiesClassName := 'TcxButtonEditProperties'; with TcxButtonEditProperties(Columna.Properties) do begin Buttons[0].Kind := bkEllipsis; end;} {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; Columna.Options.Sorting := False; Columna.Options.Editing := False; {Columna IMPORTE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTE'; Columna.Caption := 'Importe'; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.Options.Sorting := False; end; end; procedure TdmTablaFacturasProveedor.InicializarGridFacturas(var Grid: TcxGrid); var Columna : TcxGridDBColumn; begin with (Grid.ActiveView as TcxGridDBTableView) 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 facturas'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna FECHAFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHAFACTURA'; Columna.Caption := 'Fecha'; Columna.Width := tamColFecha; Columna.Options.Filtering := False; Columna.SortOrder := soDescending; {Columna CLASEFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CLASEFACTURA'; Columna.Caption := 'Clase factura'; Columna.Options.Filtering := False; Columna.Visible := False; {Columna REFERENCIA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'REFERENCIA'; Columna.Caption := 'Nº factura'; Columna.Options.Filtering := False; Columna.Width := tamColCodigo; {Columna CODIGOPROVEEDOR} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOPROVEEDOR'; Columna.Caption := 'Cód. proveedor'; Columna.Options.Filtering := False; Columna.Width := tamColCodigo; {Columna NIFCIF} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NIFCIF'; Columna.Caption := 'NIF/CIF'; Columna.Options.Filtering := False; Columna.Width := tamColNIFCIF; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Options.Filtering := False; Columna.Width := tamColNombre; {Columna DESCRIPCION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'DESCRIPCION'; Columna.Caption := 'Tipo factura'; Columna.Options.Filtering := False; Columna.Width := tamColNombre; {Columna SITUACION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'SITUACION'; Columna.Caption := 'Situación'; Columna.Options.Filtering := False; Columna.Width := tamColSituacion; {Columna IMPORTETOTAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTETOTAL'; Columna.Caption := 'Importe'; Columna.Options.Filtering := False; Columna.Width := tamColImporte; end; end; procedure TdmTablaFacturasProveedor.InicializarTablaDetalles( Tabla: TPTabla); begin with Tabla^.Fields do begin if FindField('IMPORTE') <> NIL then with (FieldByName('IMPORTE') as TFloatField) do begin DisplayFormat := DISPLAY_EUROS4; EditFormat := EDIT_EUROS4; end; end; end; procedure TdmTablaFacturasProveedor.InicializarTablaFacturas(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('FECHAFACTURA') <> NIL then with (FieldByName('FECHAFACTURA') as TDateField) do begin EditMask := MASK_FECHA; end; if FindField('FECHAVENCIMIENTO') <> NIL then with (FieldByName('FECHAVENCIMIENTO') as TDateField) do begin EditMask := MASK_FECHA; end; if FindField('BASEIMPONIBLE') <> NIL then with (FieldByName('BASEIMPONIBLE') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('DESCUENTO') <> NIL then with (FieldByName('DESCUENTO') as TFloatField) do begin DisplayFormat := DISPLAY_DTO; EditFormat := EDIT_DTO; end; if FindField('IMPORTEDESCUENTO') <> NIL then with (FieldByName('IMPORTEDESCUENTO') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('IVA') <> NIL then with (FieldByName('IVA') as TFloatField) do begin DisplayFormat := DISPLAY_IVA; EditFormat := EDIT_IVA; end; if FindField('IMPORTEIVA') <> NIL then with (FieldByName('IMPORTEIVA') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; end; if FindField('IMPORTETOTAL') <> NIL then with (FieldByName('IMPORTETOTAL') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; DisplayLabel := 'Importe total'; end; if FindField('IMPORTE') <> NIL then with (FieldByName('IMPORTE') as TIBBCDField) do begin DisplayFormat := DISPLAY_EUROS2; EditFormat := EDIT_EUROS2; DisplayLabel := 'Importe'; end; end; end; procedure TdmTablaFacturasProveedor.IniciarSQLDetalles; begin with sqlInsertarDetalles do begin Add('insert into DETALLESFACTURASPROVCONTRATOS '); Add('(CODIGOEMPRESA, CODIGOFACTURA, CODIGOCONTRATO, IMPORTE) values '); Add('(:CODIGOEMPRESA, :CODIGOFACTURA, :CODIGOCONTRATO, :IMPORTE)'); end; with sqlModificarDetalles do begin Add('update DETALLESFACTURASPROVCONTRATOS set '); Add('IMPORTE = :IMPORTE '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA)'); Add('and (CODIGOFACTURA = :CODIGOFACTURA)'); Add('and (CODIGOCONTRATO = :CODIGOCONTRATO)'); end; with sqlEliminarDetalles do begin Add('delete from DETALLESFACTURASPROVCONTRATOS '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA)'); Add(' and (CODIGOFACTURA = :CODIGOFACTURA)'); Add(' and (CODIGOCONTRATO = :CODIGOCONTRATO)'); end; with sqlConsultarDetalles do begin Add('select CODIGOFACTURA, CODIGOCONTRATO, IMPORTE '); Add('from DETALLESFACTURASPROVCONTRATOS '); Add('where (CODIGOEMPRESA = :CODIGOEMPRESA)'); Add(' and (CODIGOFACTURA = :CODIGOFACTURA)'); Add(' and (CODIGOCONTRATO = :CODIGOCONTRATO)'); end; end; procedure TdmTablaFacturasProveedor.IniciarSQLFactura; begin with sqlInsertarFactura do begin Add('insert into FACTURASPROVEEDOR '); Add('(CODIGOEMPRESA, CODIGO, CLASEFACTURA, REFERENCIA, FECHAALTA, FECHAFACTURA, FECHAVENCIMIENTO, '); Add('SITUACION, USUARIO, OBSERVACIONES, CODIGOPROVEEDOR, '); Add('NIFCIF, NOMBRE, CALLE, NUMERO, PISO, CODIGOPOSTAL, '); Add('POBLACION, PROVINCIA, TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, '); Add('FAX, PERSONACONTACTO, FORMAPAGO, BASEIMPONIBLE, DESCUENTO, '); Add('IMPORTEDESCUENTO, IVA, IMPORTEIVA, IMPORTETOTAL, TIPOFACTURA, '); Add('CODIGOTRIMESTRE) values '); Add('(:CODIGOEMPRESA, :CODIGO, :CLASEFACTURA, :REFERENCIA, :FECHAALTA, :FECHAFACTURA, :FECHAVENCIMIENTO, '); Add(':SITUACION, :USUARIO, :OBSERVACIONES, :CODIGOPROVEEDOR, '); Add(':NIFCIF, :NOMBRE, :CALLE, :NUMERO, :PISO, :CODIGOPOSTAL, '); Add(':POBLACION, :PROVINCIA, :TELEFONO1, :TELEFONO2, :MOVIL1, :MOVIL2, '); Add(':FAX, :PERSONACONTACTO, :FORMAPAGO, :BASEIMPONIBLE, :DESCUENTO, '); Add(':IMPORTEDESCUENTO, :IVA, :IMPORTEIVA, :IMPORTETOTAL, :TIPOFACTURA, '); Add(':CODIGOTRIMESTRE)'); end; with sqlModificarFactura do begin Add('update FACTURASPROVEEDOR set '); Add('CLASEFACTURA = :CLASEFACTURA, '); Add('REFERENCIA = :REFERENCIA, '); Add('TIPOFACTURA = :TIPOFACTURA, '); Add('FECHAFACTURA = :FECHAFACTURA, '); Add('FECHAVENCIMIENTO = :FECHAVENCIMIENTO, '); Add('SITUACION = :SITUACION, '); Add('OBSERVACIONES = :OBSERVACIONES, '); Add('CODIGOPROVEEDOR = :CODIGOPROVEEDOR, '); Add('NIFCIF = :NIFCIF, '); Add('NOMBRE = :NOMBRE, '); Add('CALLE = :CALLE, '); Add('NUMERO = :NUMERO, '); Add('PISO = :PISO, '); Add('CODIGOPOSTAL = :CODIGOPOSTAL, '); Add('POBLACION = :POBLACION, '); Add('PROVINCIA = :PROVINCIA, '); Add('TELEFONO1 = :TELEFONO1, '); Add('TELEFONO2 = :TELEFONO2, '); Add('MOVIL1 = :MOVIL1, '); Add('MOVIL2 = :MOVIL2, '); Add('FAX = :FAX, '); Add('PERSONACONTACTO = :PERSONACONTACTO, '); Add('FORMAPAGO = :FORMAPAGO, '); Add('BASEIMPONIBLE = :BASEIMPONIBLE, '); Add('DESCUENTO = :DESCUENTO, '); Add('IMPORTEDESCUENTO = :IMPORTEDESCUENTO, '); Add('IVA = :IVA, '); Add('IMPORTEIVA = :IMPORTEIVA, '); Add('IMPORTETOTAL = :IMPORTETOTAL, '); Add('CODIGOTRIMESTRE = :CODIGOTRIMESTRE '); Add('WHERE CODIGOEMPRESA = :CODIGOEMPRESA '); Add(' AND CODIGO = :CODIGO '); end; with sqlEliminarFactura do begin Add('delete from FACTURASPROVEEDOR '); Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); Add(' and CODIGO = :CODIGO'); end; with sqlConsultarFactura do begin Add('select * from FACTURASPROVEEDOR '); Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); Add(' and CODIGO = :CODIGO'); end; end; procedure TdmTablaFacturasProveedor.IniciarSQLGrids; begin with sqlConsultarGridFacturas do begin Add('select FP.CODIGO, CLASEFACTURA, FECHAFACTURA, REFERENCIA, CODIGOPROVEEDOR, '); Add('NIFCIF, NOMBRE, DESCRIPCION, FECHAVENCIMIENTO, SITUACION, IMPORTETOTAL '); Add('from FACTURASPROVEEDOR FP, TIPOSFACTURAS TF '); Add('where TIPOFACTURA = TF.CODIGO '); Add('and CODIGOEMPRESA = :CODIGOEMPRESA '); Add('order by FP.CODIGO'); end; with sqlConsultarGridFacturasProv do begin Add('select CODIGO, CLASEFACTURA, FECHAALTA, TIPO, CODIGOFACTURA, CODIGOPROVEEDOR, '); Add('NIFCIF, NOMBRE, FECHAVENCIMIENTO, SITUACION, IMPORTETOTAL '); Add('from FACTURASPROVEEDOR '); Add(' where CODIGOEMPRESA = :CODIGOEMPRESA'); Add(' and CODIGOPROVEEDOR = :CODIGOPROVEEDOR'); Add(' order by CODIGO'); end; with sqlConsultarGridDetalles do begin Add('select CODIGOEMPRESA, CODIGOFACTURA, CODIGOCONTRATO, IMPORTE '); Add('from DETALLESFACTURASPROVCONTRATOS '); Add(' where CODIGOEMPRESA = :CODIGOEMPRESA'); Add(' and CODIGOFACTURA = :CODIGOFACTURA'); end; with sqlConsultarTiposFactura do begin Add('select CODIGO, DESCRIPCION '); Add('from TIPOSFACTURAS '); Add('where ENTIDAD = ''PROVEEDOR'' order by DESCRIPCION '); end; with sqlConsultarGridFacturasTrimestre do begin Add('select FP.CODIGO, FP.SITUACION, FP.FECHAFACTURA, FP.TIPOFACTURA, FP.CLASEFACTURA, '); Add('FP.CODIGOPROVEEDOR, FP.NIFCIF, FP.NOMBRE, FP.BASEIMPONIBLE, FP.IMPORTEDESCUENTO, FP.IMPORTEIVA, '); Add('FP.IMPORTETOTAL, FP.CODIGOTRIMESTRE, T.SITUACION as SITUACIONTRIMESTRE '); Add('from FACTURASPROVEEDOR FP, TRIMESTRES T'); Add(' where FP.CODIGOEMPRESA = T.CODIGOEMPRESA '); Add(' and FP.CODIGOTRIMESTRE = T.CODIGO '); Add(' and FP.CODIGOEMPRESA = :CODIGOEMPRESA'); end; with sqlConsultarGridFacturasProvContrato do begin Add('select det.codigofactura, fac.fechafactura, fac.nifcif, fac.nombre,'); Add('fac.importetotal, det.importe, det.codigocontrato'); Add('from detallesfacturasprovcontratos det, facturasproveedor fac'); Add('where fac.codigoempresa = det.codigoempresa'); Add(' and fac.codigo = det.codigofactura'); Add(' and det.codigocontrato = :CODIGOCONTRATO'); Add(' and fac.codigoempresa = :CODIGOEMPRESA'); end; end; function TdmTablaFacturasProveedor.InsertarContador: boolean; begin Result := GestorContadores.InsertarContador(contFacturasProveedor); end; function TdmTablaFacturasProveedor.ValidarCodigo(Codigo: String): Boolean; begin Result := GestorContadores.validarCodigo(contFacturasProveedor, Codigo); end; function TdmTablaFacturasProveedor.ModificarSituacionFactura(Codigo, Situacion, FormaPago: 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 FACTURASPROVEEDOR '); SQL.Add('set SITUACION = :SITUACION, '); SQL.Add('FORMAPAGO = :FORMAPAGO '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add('and CODIGO = :CODIGO'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := Codigo; ParamByName('SITUACION').AsString := Situacion; ParamByName('FORMAPAGO').AsString := FormaPago; try Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasProveedor.DarIvas: 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 distinct(IVA) '); SQL.Add('from FACTURASPROVEEDOR '); SQL.Add('where IVA is not null '); SQL.Add('and CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('order by IVA descending'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; 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 TdmTablaFacturasProveedor.DarTiposOp: 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 CODIGO '); SQL.Add('from TIPOSFACTURAS '); SQL.Add('where ENTIDAD = ''PROVEEDOR'' '); SQL.Add('order by CODIGO'); 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 TdmTablaFacturasProveedor.DarTiposOpDes: 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 '); SQL.Add('from TIPOSFACTURAS '); SQL.Add('where ENTIDAD = ''PROVEEDOR'' '); SQL.Add('order by CODIGO'); 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 TdmTablaFacturasProveedor.AsignarTrimestre(CodigoFactura, CodigoTrimestre: String): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(CodigoFactura) or EsCadenaVacia(CodigoTrimestre) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update FACTURASPROVEEDOR '); SQL.Add('set CODIGOTRIMESTRE = :CODIGOTRIMESTRE '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add('and CODIGO = :CODIGO'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := CodigoFactura; ParamByName('CODIGOTRIMESTRE').AsString := CodigoTrimestre; try Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaFacturasProveedor.InicializarGridFacturasTrimestre(var Grid: TcxGrid); var Columna : TcxGridDBColumn; begin with (Grid.ActiveView as TcxGridDBTableView) 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 facturas'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna CODIGOTRIMESTRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOTRIMESTRE'; Columna.Caption := 'Cód. Trim'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; Columna.Visible := False; {Columna TIPOFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'TIPOFACTURA'; Columna.Caption := 'Tipo factura'; Columna.Options.Filtering := False; Columna.Visible := False; {Columna CLASEFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CLASEFACTURA'; Columna.Caption := 'Clase factura'; Columna.Options.Filtering := False; Columna.Visible := False; {Columna FECHAFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHAFACTURA'; Columna.Caption := 'Fecha'; Columna.Width := tamColFecha; Columna.Options.Filtering := False; Columna.SortOrder := soDescending; {Columna CODIGOPROVEEDOR} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOPROVEEDOR'; Columna.Caption := 'Cód. proveedor'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; {Columna NIFCIF} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NIFCIF'; Columna.Caption := 'NIF/CIF'; Columna.Width := tamColNIFCIF; Columna.Options.Filtering := False; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombreCorto; Columna.Options.Filtering := False; {Columna SITUACION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'SITUACION'; Columna.Caption := 'Situación'; Columna.Width := tamColSituacion; Columna.Options.Filtering := False; {Columna BASEIMPONIBLE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'BASEIMPONIBLE'; Columna.Caption := 'Base imponible'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.PropertiesClassName := 'TcxCurrencyEdit'; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0,0.00 €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna IMPORTEDESCUENTO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTEDESCUENTO'; Columna.Caption := 'Importe DTO.'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.PropertiesClassName := 'TcxCurrencyEdit'; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0,0.00 €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna IMPORTEIVA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTEIVA'; Columna.Caption := 'Importe IVA'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.PropertiesClassName := 'TcxCurrencyEdit'; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0,0.00 €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; {Columna IMPORTETOTAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTETOTAL'; Columna.Caption := 'Importe total'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporte; Columna.Options.Filtering := False; Columna.PropertiesClassName := 'TcxCurrencyEdit'; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0,0.00 €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; end; end; function TdmTablaFacturasProveedor.ComprobarTrimestreFactura(CodigoFactura: String): Boolean; var oSQL : TIBSQL; begin Result := False; if EsCadenaVacia(CodigoFactura) then Exit; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select TR.SITUACION '); SQL.Add('from FACTURASPROVEEDOR FC, TRIMESTRES TR '); SQL.Add('where FC.CODIGOEMPRESA = TR.CODIGOEMPRESA '); SQL.Add('and FC.CODIGOTRIMESTRE = TR.CODIGO '); SQL.Add('and FC.CODIGO = :CODIGO '); SQL.Add('and FC.CODIGOEMPRESA = :CODIGOEMPRESA '); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := CodigoFactura; try Prepare; ExecQuery; Result := (Fields[0].AsString = 'A'); finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasProveedor.ExisteFacturaConContrato( CodigoContrato: 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 count(CODIGOFACTURA) '); SQL.Add('from DETALLESFACTURASPROVCONTRATOS '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add('and CODIGOCONTRATO = :CODIGOCONTRATO'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGOCONTRATO').AsString := CodigoContrato; try Prepare; ExecQuery; Result := not (Fields[0].AsInteger = 0); finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaFacturasProveedor.InicializarGridFacturasPendientes( var Grid: TcxGrid); var Columna : TcxGridDBColumn; begin with (Grid.ActiveView as TcxGridDBTableView) do begin ClearItems; OptionsView.Footer := True; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; Columna.Visible := False; {Columna REFERENCIA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'REFERENCIA'; Columna.Caption := 'Referencia'; Columna.Width := tamColNombre; Columna.Options.Filtering := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0 facturas'; 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.Options.Filtering := False; Columna.Width := tamColNombreCorto; {Columna IMPORTETOTAL} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTETOTAL'; Columna.Caption := 'Importe'; Columna.Options.Filtering := False; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColNombre; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := '0,0.00 €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; end; end; function TdmTablaFacturasProveedor.DarTiposOpDesTrimestral(var ListaCodigos: TStrings): TStrings; var oSQL : TIBSQL; Lista : TStringList; begin Result := NIL; oSQL := TIBSQL.Create(Self); ListaCodigos := TStringList.Create; Lista := TStringList.Create; //tipTodas, tipGeneral, tipInmovilizado Lista.Append(msgTipFacturas0); Lista.Append(msgTipFacturas1); Lista.Append(msgTipFacturas2); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO, DESCRIPCION '); SQL.Add('from TIPOSFACTURAS '); SQL.Add('where ENTIDAD = ''PROVEEDOR'' '); SQL.Add('order by CODIGO'); try Prepare; ExecQuery; while not EOF do begin ListaCodigos.Append(Fields[0].AsString); Lista.Append(Fields[1].AsString); Next; end; Result := Lista; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaFacturasProveedor.ModificarSituacionFacturas(Codigos: TStrings; Situacion: String): Boolean; var oSQL : TIBSQL; Indice : Integer; Cadena : String; begin Result := False; if Codigos.Count = 0 then Exit; //Formateamos los códigos para optimizar la sentencia SQL for Indice:=0 to Codigos.Count-1 do begin if (Indice <> 0) then Cadena := Cadena + ','; Cadena := Cadena + '''' + Codigos.Strings[Indice] + ''''; end; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update FACTURASPROVEEDOR '); SQL.Add('set SITUACION = :SITUACION '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA '); SQL.Add('and CODIGO IN (' + Cadena + ')'); ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('SITUACION').AsString := Situacion; try Prepare; ExecQuery; Result := True; finally Close; Transaction := NIL; Free; end; end; end; { TDatosFacturaProveedor } procedure TDatosFacturaProveedor.AssignTo(Dest: TPersistent); begin inherited; // end; constructor TDatosFacturaProveedor.Create(CodigoFactura: String); begin inherited Create; Codigo := CodigoFactura; ObtenerDatos; end; constructor TDatosFacturaProveedor.Create; begin inherited Create; end; destructor TDatosFacturaProveedor.Destroy; begin inherited; end; procedure TDatosFacturaProveedor.ObtenerDatos; var oSQL : TIBSQL; begin if EsCadenaVacia(Codigo) then Exit; oSQL := TIBSQL.Create(nil); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select * from FACTURASPROVEEDOR '); SQL.Add('where CODIGOEMPRESA = :CODIGOEMPRESA'); SQL.Add(' and CODIGO = :CODIGO'); try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; ParamByName('CODIGO').AsString := Codigo; Prepare; ExecQuery; if (RecordCount > 0) then begin Referencia := FieldByName('REFERENCIA').AsString; FechaAlta := FieldByName('FECHAALTA').AsDateTime; Usuario := FieldByName('USUARIO').AsString; FechaFactura := FieldByName('FECHAFACTURA').AsDateTime; FechaVencimiento := FieldByName('FECHAVENCIMIENTO').AsDateTime; Situacion := FieldByName('SITUACION').AsString; Observaciones := FieldByName('OBSERVACIONES').AsString; CodigoProveedor := FieldByName('CODIGOPROVEEDOR').AsString; NIFCIF := FieldByName('NIFCIF').AsString; Nombre := FieldByName('NOMBRE').AsString; Calle := FieldByName('CALLE').AsString; Numero := FieldByName('NUMERO').AsString; Piso := FieldByName('PISO').AsString; CodigoPostal := FieldByName('CODIGOPOSTAL').AsString; Poblacion := FieldByName('POBLACION').AsString; Provincia := FieldByName('PROVINCIA').AsString; Telefono1 := FieldByName('TELEFONO1').AsString; Telefono2 := FieldByName('TELEFONO2').AsString; Movil1 := FieldByName('MOVIL1').AsString; Movil2 := FieldByName('MOVIL2').AsString; Fax := FieldByName('FAX').AsString; PersonaContacto := FieldByName('PERSONACONTACTO').AsString; FormaPago := FieldByName('FORMAPAGO').AsString; BaseImponible := FieldByName('BASEIMPONIBLE').AsDouble; Descuento := FieldByName('DESCUENTO').AsInteger; ImporteDescuento := FieldByName('IMPORTEDESCUENTO').AsDouble; Iva := FieldByName('IVA').AsInteger; ImporteIva := FieldByName('IMPORTEIVA').AsDouble; ImporteTotal := FieldByName('IMPORTETOTAL').AsDouble; TipoFactura := FieldByName('TIPOFACTURA').AsString; ClaseFactura := FieldByName('CLASEFACTURA').AsString; CodigoTrimestre := FieldByName('CODIGOTRIMESTRE').AsString; end else begin raise Exception.CreateFmt(msgProvNoExisteFacProv, [Codigo]); end; finally Close; Transaction := NIL; Free; end; end; end; { TListaFacturasProveedor } procedure TListaFacturasProveedor.AssignTo(Dest: TPersistent); begin inherited; // end; constructor TListaFacturasProveedor.Create(oSQL: String); begin inherited Create; FSQL := oSQL; ObtenerLista; end; constructor TListaFacturasProveedor.Create; begin inherited Create; FSQL := 'select CODIGO from FACTURASPROVEEDOR'; FSQL := FSQL + ' where CODIGOEMPRESA = :CODIGOEMPRESA'; ObtenerLista; end; function TListaFacturasProveedor.GetFactura( Index: Integer): TDatosFacturaProveedor; begin Result := TDatosFacturaProveedor(FLista.Items[Index]); end; procedure TListaFacturasProveedor.ObtenerLista; var oSQL : TIBSQL; Factura : TDatosFacturaProveedor; begin oSQL := TIBSQL.Create(nil); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Text := FSQL; try ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; ExecQuery; while not EOF do begin Factura := TDatosFacturaProveedor.Create(FieldByName('CODIGO').AsString); FLista.Add(Factura); Next; end; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaFacturasProveedor.InicializarGridFacturasProvContrato(var Grid: TcxGrid); var Columna : TcxGridDBColumn; begin with (Grid.ActiveView as TcxGridDBTableView) do begin ClearItems; OptionsView.Footer := True; {Columna CODIGOFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGOFACTURA'; Columna.Caption := 'Código'; Columna.Width := tamColCodigo; Columna.Options.Filtering := False; {Columna FECHAFACTURA} Columna := CreateColumn; Columna.DataBinding.FieldName := 'FECHAFACTURA'; Columna.Caption := 'Fecha'; Columna.Width := tamColFecha; Columna.Options.Filtering := False; {Columna NIFCIF} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NIFCIF'; Columna.Caption := 'NIF/CIF'; Columna.Width := tamColNIFCIF; Columna.Options.Filtering := False; {Columna NOMBRE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'NOMBRE'; Columna.Caption := 'Nombre'; Columna.Width := tamColNombreCorto; Columna.Options.Filtering := False; {Columna IMPORTE} Columna := CreateColumn; Columna.DataBinding.FieldName := 'IMPORTE'; Columna.Caption := 'Importe'; Columna.HeaderAlignmentHorz := taRightJustify; Columna.Width := tamColImporteLargo; Columna.Options.Filtering := False; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: #,0.00# €'; Kind := skSum; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; end; end; end.