{ =============================================================================== 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: 16-11-2002 Versión actual: 1.0.0 Fecha versión actual: 16-11-2002 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit ListadoBeneficios; interface uses Windows, Db, StdCtrls, RdxMemo, RdxCampos, RdxTitulos, Forms, RdxPaneles, RdxBotones, Controls, ExtCtrls, RdxBarras, Classes, RdxFrameComisiones, RdxFrame, RXDBCtrl, RxMemDS, ComCtrls, cxDBEdit, cxMaskEdit, cxButtonEdit, Configuracion, cxControls, cxContainer, cxEdit, cxTextEdit, cxMemo, AdvPanel, cxSpinEdit, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDBData, cxGridLevel, cxClasses, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, cxDropDownEdit, cxCalendar, InformeComisionesVendedores, vistaPrevia, RdxDBFrame, RdxFrameListadoBeneficios, InformeListadoPagosCliente, InformeListadoPagosClientes, RdxPageControl, IBCustomDataSet, IBDatabase, cxDataStorage, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox, ActnList, Grids, DBGrids, InformeListadoBeneficiosContrato, InformeDetalleBeneficiosContrato; type TfrListadoBeneficios = class(TRdxFrameListadoBeneficios) dsFacturasCliente: TDataSource; Titulo: TRdxPanelTituloOperacion; pnlCuerpo: TPanel; dsFacturasProveedor: TDataSource; Paginas: TRdxPagesControl; pagBeneficiosContrato: TTabSheet; pnlDatos: TAdvPanel; Panel3: TPanel; eCodigoContrato: TLabel; eNIFCIF: TLabel; NIFCIF: TcxTextEdit; Panel2: TPanel; Panel1: TPanel; Splitter1: TSplitter; gridFacturasProveedor: TcxGrid; gridFacturasProveedorDBTableView1: TcxGridDBTableView; gridFacturasProveedorLevel1: TcxGridLevel; gridFacturasCliente: TcxGrid; gridFacturasClienteDBTableView1: TcxGridDBTableView; gridFacturasClienteLevel1: TcxGridLevel; Panel5: TPanel; dsObrasGastos: TDataSource; eNombre: TLabel; Label1: TLabel; Label2: TLabel; Panel4: TPanel; pagListaBeneficiosContrato: TTabSheet; Panel6: TPanel; brSimple: TRdxBarraInferior; bVistaPrevia: TRdxBoton; bImprimir: TRdxBoton; bCancelar: TRdxBoton; dsTablaBeneficios: TDataSource; gridBeneficios: TcxGrid; gridBeneficiosDBTableView1: TcxGridDBTableView; gridBeneficiosLevel1: TcxGridLevel; TablaBeneficiosAux: TIBDataSet; TablaBeneficiosAuxCODIGO: TIBStringField; TablaBeneficiosAuxFECHACONTRATO: TDateField; TablaBeneficiosAuxIMPCLI: TIBBCDField; TablaBeneficiosAuxIMPORTETOTAL: TIBBCDField; TablaBeneficiosAuxPORCENTAJE: TIBBCDField; TablaBeneficiosAuxBENEFICIO: TIBBCDField; Nombre: TcxTextEdit; Panel8: TPanel; Panel11: TPanel; Label3: TLabel; Panel9: TPanel; bEliminar: TRdxBoton; bAnadir: TRdxBoton; bEliminarTodo: TRdxBoton; TablaBeneficiosAuxNIFCIF: TIBStringField; TablaBeneficiosAuxNOMBRE: TIBStringField; CodContrato: TcxTextEdit; Acciones: TActionList; actAnadir: TAction; actEliminar: TAction; actEliminarTodo: TAction; gridObrasGastos: TcxGrid; gridObrasGastosDBTableView1: TcxGridDBTableView; gridObrasGastosLevel1: TcxGridLevel; Panel10: TPanel; PorcentajeBeneficio: TLabel; eePorcentajeBeneficio: TLabel; eeTotalFacProveedor: TLabel; eeTotalObrasGastos: TLabel; eeTotalFacCliente: TLabel; eeTotalBeneficio: TLabel; eTotalFacCliente: TLabel; eTotalFacProveedor: TLabel; eTotalObrasGastos: TLabel; ePorcentajeBeneficio: TLabel; eTotalBeneficio: TLabel; TablaBeneficiosAuxIMPOTROS: TIBBCDField; TablaBeneficiosAuxIMPPROV: TIBBCDField; RdxBoton1: TRdxBoton; actRecalcular: TAction; procedure bCancelarClick(Sender: TObject); procedure bImprimirClick(Sender: TObject); procedure bVistaPreviaClick(Sender: TObject); procedure Panel1Resize(Sender: TObject); procedure gridFacturasDBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); procedure IBDataSet1CalcFields(DataSet: TDataSet); procedure gridFacturasProveedorResize(Sender: TObject); procedure actAnadirExecute(Sender: TObject); procedure actEliminarExecute(Sender: TObject); procedure actEliminarTodoExecute(Sender: TObject); procedure gridObrasGastosExit(Sender: TObject); procedure gridBeneficiosDBTableView1DblClick(Sender: TObject); procedure PaginasChange(Sender: TObject); procedure actRecalcularExecute(Sender: TObject); private ContadorAux: Integer; FInformeListadoBeneficiosContrato : TdmInformeListadoBeneficiosContrato; FInformeDetalleBeneficiosContrato : TdmInformeDetalleBeneficiosContrato; procedure Filtrar; procedure BuscarFacturasCliente; procedure BuscarFacturasProveedor; procedure BuscarObrasGastos; protected procedure ActivarModoConsultar; override; procedure RecargarDatosDetalle; override; public constructor Create (AOwner : TComponent); override; destructor Destroy; override; published end; var frListadoBeneficios: TfrListadoBeneficios; implementation {$R *.DFM} uses Mensajes, IB, Colores, BaseDatos, Sysutils, Constantes, StrFunc, TablaPoblaciones, Excepciones, IBErrorCodes, Variants, Entidades, NumFunc, Literales, TablaFacturasCliente, TablaPagosCliente, DateFunc, cxCheckBox, cxDateUtils, Graphics, ContratosClientes, RdxFrameContratos, TablaClientes, TablaContratos, TablaFacturasProveedor, RdxEmpresaActiva, TablaObrasGastos; procedure TfrListadoBeneficios.ActivarModoConsultar; begin Visible := True; end; procedure TfrListadoBeneficios.BuscarFacturasCliente; begin if Transaccion = NIL then Exit; try TablaFacturasCliente.Close; // Buscar la fila a tratar si es necesario if not EsCadenaVacia(CodigoContrato) then begin TablaFacturasCliente.Params.ByName('CODIGOCONTRATO').AsString := CodigoContrato; TablaFacturasCliente.Params.ByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; end; TablaFacturasCliente.Prepare; TablaFacturasCliente.Open; dmTablaFacturasCliente.InicializarTablaFacturas(@TablaFacturasCliente); gridFacturasCliente.ActiveView.DataController.GotoFirst; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrListadoBeneficios.BuscarFacturasProveedor; begin if Transaccion = NIL then Exit; try TablaFacturasProveedor.Close; // Buscar la fila a tratar si es necesario if not EsCadenaVacia(CodigoContrato) then begin TablaFacturasProveedor.Params.ByName('CODIGOCONTRATO').AsString := CodigoContrato; TablaFacturasProveedor.Params.ByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; end; TablaFacturasProveedor.Prepare; TablaFacturasProveedor.Open; dmTablaFacturasProveedor.InicializarTablaFacturas(@TablaFacturasProveedor); gridFacturasProveedor.ActiveView.DataController.GotoFirst; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; constructor TfrListadoBeneficios.Create (AOwner : TComponent); var Columna : TcxGridDBColumn; begin inherited Create(AOwner); FInformeListadoBeneficiosContrato := TdmInformeListadoBeneficiosContrato.Create(Self); FInformeDetalleBeneficiosContrato := TdmInformeDetalleBeneficiosContrato.Create(Self); Entidad := entListadoBeneficios; BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaBeneficios := TablaBeneficiosAux; TablaFacturasProveedor := TIBDataSet.Create(Self); TablaFacturasCliente := TIBDataSet.Create(Self); TablaObrasGastos := TIBDataSet.Create(Self); dsTablaBeneficios.DataSet := TablaBeneficios; dsFacturasProveedor.DataSet := TablaFacturasProveedor; dsFacturasCliente.DataSet := TablaFacturasCliente; dsObrasGastos.DataSet := TablaObrasGastos; with TablaBeneficios do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaContratos.sqlConsultarGridBeneficios); RefreshSQL.Assign(dmTablaContratos.sqlConsultarGridBeneficios); AutoCalcFields := True; OnCalcFields := IBDataSet1CalcFields; ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo; Prepare; Open; end; with TablaFacturasProveedor do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaFacturasProveedor.sqlConsultarGridFacturasProvContrato); RefreshSQL.Assign(dmTablaFacturasProveedor.sqlConsultarGridFacturasProvContrato); end; with TablaFacturasCliente do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaFacturasCliente.sqlConsultarGridFacturasCliContrato); RefreshSQL.Assign(dmTablaFacturasCliente.sqlConsultarGridFacturasCliContrato); end; with TablaObrasGastos do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaObrasGastos.sqlGrid); InsertSQL.Assign(dmTablaObrasGastos.sqlInsertar); ModifySQL.Assign(dmTablaObrasGastos.sqlModificar); DeleteSQL.Assign(dmTablaObrasGastos.sqlEliminar); end; dmTablaContratos.InicializarGridBeneficios(gridBeneficios); dmTablaContratos.InicializarTablaBeneficios(@TablaBeneficios); dmTablaFacturasCliente.InicializarGridFacturasCliContrato(gridFacturasCliente); dmTablaFacturasProveedor.InicializarGridFacturasProvContrato(gridFacturasProveedor); dmTablaObrasGastos.InicializarGrid(gridObrasGastosDBTableView1); Filtrar; Paginas.ActivePageIndex := 0; end; destructor TfrListadoBeneficios.Destroy; begin FInformeListadoBeneficiosContrato.Free; FInformeDetalleBeneficiosContrato.Free; TablaBeneficios.Close; TablaBeneficios.UnPrepare; TablaBeneficios.Free; TablaFacturasProveedor.Close; TablaFacturasProveedor.UnPrepare; TablaFacturasProveedor.Free; TablaFacturasCliente.Close; TablaFacturasCliente.UnPrepare; TablaFacturasCliente.Free; TablaObrasGastos.Close; TablaObrasGastos.UnPrepare; TablaObrasGastos.Free; inherited; end; procedure TfrListadoBeneficios.bImprimirClick(Sender: TObject); begin if (Paginas.ActivePageIndex = 0) then begin FInformeListadoBeneficiosContrato.Preview := nil; FInformeListadoBeneficiosContrato.Imprimir; end else begin FInformeDetalleBeneficiosContrato.CodigoContrato := CodigoContrato; FInformeDetalleBeneficiosContrato.NIFCIF := NIFCIF.Text; FInformeDetalleBeneficiosContrato.Nombre := Nombre.Text; FInformeDetalleBeneficiosContrato.Preview := nil; FInformeDetalleBeneficiosContrato.Imprimir; end; end; procedure TfrListadoBeneficios.bCancelarClick(Sender: TObject); begin CloseFrame; end; procedure TfrListadoBeneficios.bVistaPreviaClick(Sender: TObject); var FVistaPrevia : TfrVistaPrevia; begin if (Paginas.ActivePageIndex = 0) then begin FVistaPrevia := TfrVistaPrevia.Create(Self); FInformeListadoBeneficiosContrato.Preview := FVistaPrevia.Preview; FInformeListadoBeneficiosContrato.Previsualizar; CaptionModal := 'Informe de lista de beneficios por contrato'; end else begin FInformeDetalleBeneficiosContrato.CodigoContrato := CodigoContrato; FInformeDetalleBeneficiosContrato.NIFCIF := NIFCIF.Text; FInformeDetalleBeneficiosContrato.Nombre := Nombre.Text; FVistaPrevia := TfrVistaPrevia.Create(Self); FInformeDetalleBeneficiosContrato.Preview := FVistaPrevia.Preview; FInformeDetalleBeneficiosContrato.Previsualizar; CaptionModal := 'Informe de detalle de beneficios por contrato'; end; WidthModal := 800; HeightModal := 600; ModoModal := Consultar; EntidadModal := entListadoPagosCliente; ContenidoModal := FVistaPrevia; end; procedure TfrListadoBeneficios.gridFacturasDBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); var IndiceCol : Integer; begin if not AViewInfo.Selected then begin IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName('BENEFICIO').Index; if Copy(Trim(AViewInfo.GridRecord.DisplayTexts[IndiceCol]), 1, 1) = '-' then ACanvas.Canvas.Font.Color := $000000CC; end; end; procedure TfrListadoBeneficios.Panel1Resize(Sender: TObject); begin gridFacturasProveedor.Width := (Panel1.ClientWidth - Splitter1.Width) div 2; gridFacturasCliente.Width := gridFacturasProveedor.Width; gridObrasGastos.Width := gridFacturasProveedor.Width; end; procedure TfrListadoBeneficios.RecargarDatosDetalle; var TotalProv: double; TotalObrasGastos: double; TotalCli: double; TotalBeneficio: double; TotalPorcentaje: double; begin CodContrato.Text := CodigoContrato; NifCif.Text := TablaBeneficios.FieldByName('NIFCIF').AsString; Nombre.Text := TablaBeneficios.FieldByName('Nombre').AsString; BuscarFacturasCliente; BuscarFacturasProveedor; BuscarObrasGastos; if (not varIsNull(gridFacturasProveedor.ActiveView.DataController.Summary.FooterSummaryValues[0])) then TotalProv := gridFacturasProveedor.ActiveView.DataController.Summary.FooterSummaryValues[0] else TotalProv := 0; eeTotalFacProveedor.Caption := msgCliListBeneCon1; eTotalFacProveedor.Caption := '- ' + FormatFloat(DISPLAY_EUROS2, TotalProv); if (not varIsNull(gridObrasGastos.ActiveView.DataController.Summary.FooterSummaryValues[0])) then TotalObrasGastos := gridObrasGastos.ActiveView.DataController.Summary.FooterSummaryValues[0] else TotalObrasGastos := 0; eeTotalObrasGastos.Caption := msgCliListBeneCon2; eTotalObrasGastos.Caption := '- ' + FormatFloat(DISPLAY_EUROS2, TotalObrasGastos); if (not varIsNull(gridFacturasCliente.ActiveView.DataController.Summary.FooterSummaryValues[0])) then TotalCli := gridFacturasCliente.ActiveView.DataController.Summary.FooterSummaryValues[0] else TotalCli := 0; eeTotalFacCliente.Caption := msgCliListBeneCon3; eTotalFacCliente.Caption := FormatFloat(DISPLAY_EUROS2, TotalCli); TotalBeneficio := TotalCli - (TotalProv + TotalObrasGastos); TotalPorcentaje := darPorcentaje(TotalCli, TotalBeneficio); eeTotalBeneficio.Caption := msgCliListBeneCon4; eTotalBeneficio.Caption := FormatFloat(DISPLAY_EUROS2, TotalBeneficio); eePorcentajeBeneficio.Caption := msgCliListBeneCon5; if (TotalPorcentaje = -1) then ePorcentajeBeneficio.Caption := 'N/A' else ePorcentajeBeneficio.Caption := FormatFloat(DISPLAY_CTO, TotalPorcentaje); end; procedure TfrListadoBeneficios.Filtrar; var Columna1, Columna2 : TcxGridDBColumn; AItemList: TcxFilterCriteriaItemList; begin with gridBeneficios.ActiveView.DataController.Filter do begin BeginUpdate; try Root.Clear; Columna1 := (gridBeneficios.ActiveView as TcxGridDBTableView).GetColumnByFieldName('IMPPROV'); Columna2 := (gridBeneficios.ActiveView as TcxGridDBTableView).GetColumnByFieldName('IMPCLI'); AItemList := Root.AddItemList(fboOr); AItemList.AddItem(Columna1, foNotEqual, '0', 'Nulo'); AItemList.AddItem(Columna2, foNotEqual, '0', 'Nulo'); Active := True; finally EndUpdate; gridBeneficios.ActiveView.DataController.GotoFirst; end; end; end; procedure TfrListadoBeneficios.IBDataSet1CalcFields(DataSet: TDataSet); var Aux: Double; begin with DataSet do begin if VarIsNull(FieldByName('IMPPROV').AsVariant) then FieldByName('IMPPROV').AsFloat := 0; if VarIsNull(FieldByName('IMPCLI').AsVariant) then FieldByName('IMPCLI').AsFloat := 0; FieldByName('BENEFICIO').AsFloat := (FieldByName('IMPCLI').AsFloat - FieldByName('IMPPROV').AsFloat) - FieldByName('IMPOTROS').AsFloat; Aux := darPorcentaje(FieldByName('IMPCLI').AsFloat, FieldByName('BENEFICIO').AsFloat); if (Aux = -1) then // then FieldByName('PORCENTAJE').AsString := 'N/A'; else FieldByName('PORCENTAJE').AsFloat := darPorcentaje(FieldByName('IMPCLI').AsFloat, FieldByName('BENEFICIO').AsFloat); end; end; procedure TfrListadoBeneficios.gridBeneficiosDBTableView1DblClick(Sender: TObject); begin CodigoContrato := TablaBeneficios.FieldByName('CODIGO').AsString; Paginas.ActivePageIndex := 1; end; procedure TfrListadoBeneficios.gridFacturasProveedorResize(Sender: TObject); begin gridObrasGastos.Width := gridFacturasProveedor.Width; end; procedure TfrListadoBeneficios.BuscarObrasGastos; begin try TablaObrasGastos.Close; // Buscar la fila a tratar si es necesario if not EsCadenaVacia(CodigoContrato) then begin TablaObrasGastos.Params.ByName('CODIGOCONTRATO').AsString := CodigoContrato; end; TablaObrasGastos.Prepare; TablaObrasGastos.Open; // dmTablaObrasGastos.InicializarTablaObrasGastos(@TablaObrasGastos); if TablaObrasGastos.RecordCount = -1 then ContadorAux := 0 else ContadorAux := TablaObrasGastos.RecordCount; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrListadoBeneficios.actAnadirExecute(Sender: TObject); begin try with TablaObrasGastos do begin Next; if EOF then Append else begin Prior; Insert; end; TablaObrasGastos.FieldByName('CODIGOCONTRATO').AsString := CodigoContrato; TablaObrasGastos.FieldByName('CODIGO').AsInteger := ContadorAux; TablaObrasGastos.FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha; TablaObrasGastos.FieldByName('USUARIO').AsString := dmBaseDatos.Usuario; TablaObrasGastos.FieldByName('FECHA').AsDateTime := dmBaseDatos.DarFecha; Inc(ContadorAux); end; gridObrasGastos.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrListadoBeneficios.actEliminarExecute(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrar) <> IDYES) then Exit; if TablaObrasGastos.RecordCount = 0 then begin { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } TablaObrasGastos.Cancel; Exit end; try TablaObrasGastos.Delete; commit; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrListadoBeneficios.actEliminarTodoExecute(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrarTodo) <> IDYES) then Exit; try with TablaObrasGastos do begin if IsEmpty then Exit; DisableControls; Last; while not BOF do begin Delete; Prior; end; if not IsEmpty then Delete; EnableControls; commit; end; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrListadoBeneficios.gridObrasGastosExit(Sender: TObject); begin commit; end; procedure TfrListadoBeneficios.PaginasChange(Sender: TObject); begin if gridBeneficiosDBTableView1.ViewData.RecordCount = 0 then begin Paginas.ActivePageIndex := 0; exit; end; if (Paginas.ActivePageIndex = 1) then CodigoContrato := TablaBeneficios.FieldByName('CODIGO').AsString; end; procedure TfrListadoBeneficios.actRecalcularExecute(Sender: TObject); begin RecargarDatosDetalle; end; end.