{ =============================================================================== 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: 02-12-2002 Versión actual: 1.0.0 Fecha versión actual: 02-12-2002 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit PresupuestosClientes; interface uses Windows, Db, Menus, am2000menuitem, am2000popupmenu, am2000, RdxBarras, RdxBotones, Grids, DBGrids, RXDBCtrl, Classes, Controls, RdxFrame, ExtCtrls, RdxPaneles, RdxFramePresupuestos, Dialogs, Configuracion, Graphics, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxEdit, cxDBData, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, Entidades, ActnList, cxContainer, cxTextEdit, cxMaskEdit, cxDropDownEdit, StdCtrls, am2000utils, cxDataStorage; type TfrPresupuestosClientes = class(TRdxFramePresupuestos) pnlCuerpo: TRdxPanel; pnlGrid: TRdxPanel; pnlCabecera: TRdxBarraSuperior; bModificar: TRdxBotonSuperior; bEliminar: TRdxBotonSuperior; bConsultar: TRdxBotonSuperior; dsPresupuestos: TDataSource; brSeleccion: TRdxBarraInferior; bSeleccionar: TRdxBoton; bCancelar: TRdxBoton; brSimple: TRdxBarraInferior; bSalir: TRdxBoton; gridPresupuestos: TcxGrid; gridPresupuestosDBTableView1: TcxGridDBTableView; gridPresupuestosLevel1: TcxGridLevel; bSeparador1: TShape; bBuscar: TRdxBotonSuperior; MenuOpciones: TPopupMenu2000; Empresa: TMenuItem2000; MenuItem20002: TMenuItem2000; Contadores: TMenuItem2000; MenuItem1: TMenuItem2000; menuAnadir: TPopupMenu2000; mnNuevo: TMenuItem2000; MenuItem20004: TMenuItem2000; mnCopiar: TMenuItem2000; Acciones: TActionList; actModificar: TAction; actEliminar: TAction; actConsultar: TAction; MenuItem2: TMenuItem2000; MenuItem3: TMenuItem2000; bImprimir: TRdxBotonSuperior; actImprimir: TAction; actSeleccionar: TAction; actCancelar: TAction; actAceptar: TAction; MenuItem4: TMenuItem2000; MenuItem5: TMenuItem2000; pnlExtra: TRdxBarraSuperior; bAceptar: TRdxBoton; bAnular: TRdxBoton; MenuItem6: TMenuItem2000; MenuItem7: TMenuItem2000; MenuItem8: TMenuItem2000; MenuItem9: TMenuItem2000; actAnadir: TAction; MenuItem10: TMenuItem2000; MenuItem11: TMenuItem2000; MenuItem12: TMenuItem2000; MenuItem13: TMenuItem2000; MenuItem14: TMenuItem2000; bAnadir: TRdxBotonMenu; MenuItem15: TMenuItem2000; MenuItem16: TMenuItem2000; Panel1: TPanel; bSeparador2: TShape; eFamilia: TLabel; cbxDocumento: TcxComboBox; actAceptarPresupuesto: TAction; actRechazarPresupuesto: TAction; imgSombra: TImage; bRefrescar: TRdxBoton; Shape1: TShape; actRefrescarDatos: TAction; Panel2: TPanel; eNombre: TLabel; Buscar: TcxTextEdit; bLimpiar: TRdxBoton; actAnadirReforma: TAction; procedure bSeleccionarClick(Sender: TObject); procedure bCancelarClick(Sender: TObject); procedure bSalirClick(Sender: TObject); procedure RdxFramePresupuestosShow(Sender: TObject); procedure gridPresupuestosDBTableView1DblClick(Sender: TObject); procedure actSeleccionarExecute(Sender: TObject); procedure actCancelarExecute(Sender: TObject); procedure actAceptarExecute(Sender: TObject); procedure actModificarExecute(Sender: TObject); procedure actEliminarExecute(Sender: TObject); procedure actConsultarExecute(Sender: TObject); procedure actAnadirExecute(Sender: TObject); procedure cbxFamiliaPropertiesEditValueChanged(Sender: TObject); procedure actAnadirCocinaExecute(Sender: TObject); procedure actImprimirExecute(Sender: TObject); procedure actAnadirBanoExecute(Sender: TObject); procedure actAnadirArmariosExecute(Sender: TObject); procedure actAnadirElectroExecute(Sender: TObject); procedure gridPresupuestosDBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); procedure actAceptarPresupuestoUpdate(Sender: TObject); procedure actRechazarPresupuestoUpdate(Sender: TObject); procedure actAceptarPresupuestoExecute(Sender: TObject); procedure actRechazarPresupuestoExecute(Sender: TObject); procedure actAnadirCopiaExecute(Sender: TObject); procedure actRefrescarDatosExecute(Sender: TObject); procedure BuscarPropertiesChange(Sender: TObject); procedure bLimpiarClick(Sender: TObject); procedure actAnadirReformaExecute(Sender: TObject); private FCodContrato : String; procedure ActualizarBotones; protected procedure FreeContenido; override; procedure BuscarPresupuesto; override; procedure ActualizarBarras; override; procedure SetContenido (NuevoFrame : TRdxFrame); override; procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override; procedure VerModal; override; public constructor Create (AOwner : TComponent); override; destructor Destroy; override; end; var frPresupuestosClientes: TfrPresupuestosClientes; implementation {$R *.DFM} uses Variants, TablaPresupuestos, BaseDatos, IBCustomDataSet, TablaDocumentos, Mensajes, Sysutils, PresupuestoCliente, Literales, RechazarPresupuestoCliente, ImprimirPresupuestosCliente, AceptarPresupuestoCliente, RdxDBFrame, TablaContratos, StrFunc, ContratoCliente, SysFunc, forms; { TfrPresupuestosClientes } procedure TfrPresupuestosClientes.BuscarPresupuesto; begin with TablaPresupuestos do begin DisableControls; Close; Open; dmTablaPresupuestos.InicializarTablaPresupuestos(@TablaPresupuestos); ActualizarBotones; EnableControls; if not Locate('CODIGO', CodigoPresupuesto, []) then gridPresupuestosDBTableView1.Controller.GoToFirst else gridPresupuestosDBTableView1.Controller.TopRowIndex := gridPresupuestosDBTableView1.Controller.FocusedRowIndex; end; end; constructor TfrPresupuestosClientes.Create(AOwner: TComponent); begin inherited Create(AOwner); Entidad := entPresupuestoCliente; BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaPresupuestos := TIBDataSet.Create(Self); dsPresupuestos.DataSet := TablaPresupuestos; with TablaPresupuestos do begin DisableControls; Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaPresupuestos.sqlConsultarGridPresupuestos); RefreshSQL.Assign(dmTablaPresupuestos.sqlConsultarGridPresupuestos); Prepare; Open; ActualizarBotones; EnableControls; end; dmTablaPresupuestos.InicializarTablaPresupuestos(@TablaPresupuestos); dmTablaPresupuestos.InicializarGridPresupuestos(gridPresupuestos); gridPresupuestosDBTableView1.Controller.GoToFirst; cbxDocumento.Properties.Items.Add('Todos'); cbxDocumento.Properties.Items.AddStrings(dmTablaDocumentos.DarDocumentos); cbxDocumento.ItemIndex := 0; end; destructor TfrPresupuestosClientes.Destroy; begin TablaPresupuestos.Close; TablaPresupuestos.UnPrepare; TablaPresupuestos.Free; inherited; end; procedure TfrPresupuestosClientes.FreeContenido; begin if (Contenido is TRdxFramePresupuestos) then CodigoPresupuesto := (Contenido as TRdxFramePresupuestos).CodigoPresupuesto; inherited FreeContenido; gridPresupuestos.SetFocus; end; procedure TfrPresupuestosClientes.bSeleccionarClick(Sender: TObject); begin CodigoPresupuesto := TablaPresupuestos.FieldByName('CODIGO').AsString; CloseFrame; end; procedure TfrPresupuestosClientes.bCancelarClick(Sender: TObject); begin FCodigoPresupuesto := NULL; CloseFrame; end; procedure TfrPresupuestosClientes.bSalirClick(Sender: TObject); begin CloseFrame; end; procedure TfrPresupuestosClientes.ActualizarBarras; begin inherited; case Modo of Consultar : begin if BarraSeleccion <> NIL then BarraSeleccion.Visible := False; if BarraSalir <> NIL then BarraSalir.Visible := True; if BarraOperacion <> NIL then BarraOperacion.Visible := False; end; { Facturar : begin if BarraSeleccion <> NIL then BarraSeleccion.Visible := True; if BarraSalir <> NIL then BarraSalir.Visible := False; if BarraOperacion <> NIL then BarraOperacion.Visible := False; end;} end; end; procedure TfrPresupuestosClientes.ActualizarBotones; begin if BaseDatos.IsReadOnly then begin actAnadir.Enabled := False; actModificar.Enabled := False; actEliminar.Enabled := False; actConsultar.Enabled := True; actImprimir.Enabled := True; actAceptarPresupuesto.Enabled := False; actRechazarPresupuesto.Enabled := False; Exit; end; if TablaPresupuestos.RecordCount = 0 then begin actAnadir.Enabled := True; actModificar.Enabled := False; actEliminar.Enabled := False; actConsultar.Enabled := False; actImprimir.Enabled := False; actAceptarPresupuesto.Enabled := False; actRechazarPresupuesto.Enabled := False; end else begin actAnadir.Enabled := True; actModificar.Enabled := True; actEliminar.Enabled := True; actConsultar.Enabled := True; actImprimir.Enabled := True; actAceptarPresupuesto.Enabled := True; actRechazarPresupuesto.Enabled := True; end; end; procedure TfrPresupuestosClientes.RdxFramePresupuestosShow( Sender: TObject); begin gridPresupuestos.SetFocus; end; procedure TfrPresupuestosClientes.gridPresupuestosDBTableView1DblClick( Sender: TObject); begin if Modo in [Seleccionar, Contratar] then actSeleccionar.Execute else actModificar.Execute; end; procedure TfrPresupuestosClientes.actSeleccionarExecute(Sender: TObject); begin CodigoPresupuesto := TablaPresupuestos.FieldByName('CODIGO').AsString; CloseFrame; end; procedure TfrPresupuestosClientes.actCancelarExecute(Sender: TObject); begin FCodigoPresupuesto := NULL; CloseFrame; end; procedure TfrPresupuestosClientes.actAceptarExecute(Sender: TObject); begin CloseFrame; end; procedure TfrPresupuestosClientes.actModificarExecute(Sender: TObject); begin if TablaPresupuestos.FieldByName('SITUACION').AsString = 'ACEPTADO' then begin VerMensaje('No se puede modificar este presupuesto porque está aceptado.'); Exit; end; Contenido := TfrPresupuestoCliente.Create(Self); Contenido.Modo := Modificar; end; procedure TfrPresupuestosClientes.actEliminarExecute(Sender: TObject); begin if TablaPresupuestos.FieldByName('SITUACION').AsString = 'ACEPTADO' then begin VerMensaje('No se puede eliminar este presupuesto porque está aceptado.'); Exit; end; Contenido := TfrPresupuestoCliente.Create(Self); Contenido.Modo := Eliminar; end; procedure TfrPresupuestosClientes.actConsultarExecute(Sender: TObject); begin Contenido := TfrPresupuestoCliente.Create(Self); Contenido.Modo := Consultar; end; procedure TfrPresupuestosClientes.actAnadirExecute(Sender: TObject); begin Contenido := TfrPresupuestoCliente.Create(Self); Contenido.Entidad := entPresupuestoVarios; Contenido.Modo := Anadir; end; procedure TfrPresupuestosClientes.cbxFamiliaPropertiesEditValueChanged( Sender: TObject); var Columna : TcxGridDBColumn; TextoDocumento : String; begin TextoDocumento := cbxDocumento.Text; with gridPresupuestos.ActiveView.DataController.Filter do begin BeginUpdate; try Columna := (gridPresupuestos.ActiveView as TcxGridDBTableView).GetColumnByFieldName('DESCRIPCION'); if UpperCase(TextoDocumento) = 'TODOS' then begin Columna.Visible := True; Entidad := entPresupuestoCliente; Clear; end else begin Columna.Visible := False; Root.Clear; Root.AddItem(Columna, foEqual, TextoDocumento, 'DESCRIPCION'); Active := True; Entidad := dmTablaDocumentos.DarEntidadDocumento(entPresupuestoCliente,TablaPresupuestos.FieldByName('CODIGODOCUMENTO').AsString); end; finally EndUpdate; gridPresupuestos.ActiveView.DataController.GotoFirst; end; end; end; procedure TfrPresupuestosClientes.actAnadirCocinaExecute(Sender: TObject); var ACursor: TCursor; begin ACursor := Screen.Cursor; Screen.Cursor := crHourGlass; try Contenido := TfrPresupuestoCliente.Create(Self); Contenido.Entidad := entPresupuestoCocina; Contenido.Modo := Anadir; finally Screen.Cursor := ACursor; end; end; procedure TfrPresupuestosClientes.actImprimirExecute(Sender: TObject); begin Contenido := TfrImprimirPresupuestosCliente.Create(Self); Contenido.Modo := Imprimir; end; procedure TfrPresupuestosClientes.actAnadirBanoExecute(Sender: TObject); begin Contenido := TfrPresupuestoCliente.Create(Self); Contenido.Entidad := entPresupuestoBano; Contenido.Modo := Anadir; end; procedure TfrPresupuestosClientes.actAnadirArmariosExecute( Sender: TObject); begin Contenido := TfrPresupuestoCliente.Create(Self); Contenido.Entidad := entPresupuestoArmarios; Contenido.Modo := Anadir; end; procedure TfrPresupuestosClientes.actAnadirElectroExecute(Sender: TObject); begin Contenido := TfrPresupuestoCliente.Create(Self); Contenido.Entidad := entPresupuestoElectro; Contenido.Modo := Anadir; end; procedure TfrPresupuestosClientes.SetContenido(NuevoFrame: TRdxFrame); begin inherited; if (Contenido is TfrImprimirPresupuestosCliente) then (Contenido as TfrImprimirPresupuestosCliente).CodigoPresupuesto := FCodigoPresupuesto; end; procedure TfrPresupuestosClientes.gridPresupuestosDBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); var IndiceCol : Integer; begin if not AViewInfo.Selected then begin IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName('SITUACION').Index; if UpperCase(AViewInfo.GridRecord.DisplayTexts[IndiceCol]) = 'RECHAZADO' then ACanvas.Canvas.Font.Color := clGray; if UpperCase(AViewInfo.GridRecord.DisplayTexts[IndiceCol]) = 'ACEPTADO' then ACanvas.Canvas.Font.Color := clNavy; end; end; procedure TfrPresupuestosClientes.actAceptarPresupuestoUpdate( Sender: TObject); begin if (TablaPresupuestos.RecordCount > 0) then begin if (UpperCase(TablaPresupuestos.FieldByName('SITUACION').AsString) = 'ACEPTADO') then (Sender as TAction).Enabled := False else (Sender as TAction).Enabled := True; end else (Sender as TAction).Enabled := False; end; procedure TfrPresupuestosClientes.actRechazarPresupuestoUpdate( Sender: TObject); begin if (TablaPresupuestos.RecordCount > 0) then begin if (UpperCase(TablaPresupuestos.FieldByName('SITUACION').AsString) = 'RECHAZADO') then (Sender as TAction).Enabled := False else (Sender as TAction).Enabled := True; end else (Sender as TAction).Enabled := False; end; procedure TfrPresupuestosClientes.actAceptarPresupuestoExecute( Sender: TObject); var SituacionAux : String; ContenidoAux : TfrContratoCliente; begin CodigoPresupuesto := TablaPresupuestos.FieldByName('CODIGO').AsString; SituacionAux := UpperCase(TablaPresupuestos.FieldByName('SITUACION').AsString); if SituacionAux = 'ACEPTADO' then begin VerMensajeFmt(msgCliPreYaAceptado, [FCodigoPresupuesto]); exit; end; if SituacionAux = 'RECHAZADO' then begin case VerMensajePreguntaFmt(msgCliCambiarAAceptar, [FCodigoPresupuesto]) of IDNO : Exit; end end; frAceptarPresupuestoCliente := TfrAceptarPresupuestoCliente.Create(Self); with frAceptarPresupuestoCliente do begin try frAceptarPresupuestoCliente.CodigoPresupuesto := Self.CodigoPresupuesto; ShowModal; if ModalResult in [mrCancel] then Rollback else begin BuscarPresupuesto; if ModalResult = mrYes then // Dar de alta el contrato del presupuesto begin FCodContrato := dmTablaContratos.CrearContrato(CodigoPresupuesto); if EsCadenaVacia(FCodContrato) then begin Rollback; VerMensaje('No se ha podido crear el contrato') end else begin Commit; VerMensajeFmt('El contrato asociado a este presupuesto es %s.', [FCodContrato]) end; end else // NO dar de alta el contrato del presupuesto Commit; end; finally Free; BuscarPresupuesto; end; end; end; procedure TfrPresupuestosClientes.actRechazarPresupuestoExecute( Sender: TObject); var SituacionAux : String; begin CodigoPresupuesto := TablaPresupuestos.FieldByName('CODIGO').AsString; SituacionAux := UpperCase(TablaPresupuestos.FieldByName('SITUACION').AsString); if SituacionAux = 'RECHAZADO' then begin VerMensajeFmt(msgCliPreYaRechazado, [FCodigoPresupuesto]); Exit; end; if SituacionAux = 'ACEPTADO' then begin if not EsCadenaVacia(dmTablaPresupuestos.DarContratoDelPresupuesto(CodigoPresupuesto)) then begin VerMensajeFmt(msgCliPreConContrato, [CodigoPresupuesto]); Exit; end else case VerMensajePreguntaFmt(msgCliCambiarARechazar, [FCodigoPresupuesto]) of IDNO : Exit; end end; frRechazarPresupuestoCliente := TfrRechazarPresupuestoCliente.Create(Self); with frRechazarPresupuestoCliente do begin try frRechazarPresupuestoCliente.CodigoPresupuesto := Self.CodigoPresupuesto; ShowModal; if ModalResult = mrOK then Commit else Rollback; BuscarPresupuesto; finally Free; end; end; end; procedure TfrPresupuestosClientes.CambiarModo(ModoAnterior, Modo: TRdxModo); begin with TablaPresupuestos do begin Close; case Modo of Contratar : begin SelectSQL.Assign(dmTablaPresupuestos.sqlConsultarGridPresupuestosContratar); BarraExtra.Visible := False; end else BarraExtra.Visible := True; end; end; inherited; dmTablaPresupuestos.InicializarTablaPresupuestos(@TablaPresupuestos); end; procedure TfrPresupuestosClientes.VerModal; begin if (ContenidoModal is TfrContratoCliente) then (ContenidoModal as TfrContratoCliente).CodigoContrato := FCodContrato; inherited; end; procedure TfrPresupuestosClientes.actAnadirCopiaExecute(Sender: TObject); var FCodAux : String; begin CodigoPresupuesto := TablaPresupuestos.FieldByName('CODIGO').AsString; FCodAux := dmTablaPresupuestos.CopiarPresupuesto(CodigoPresupuesto); if EsCadenaVacia(FCodAux) then begin Rollback; VerMensaje('No se ha podido copiar el presupuesto') end else begin FCodigoPresupuesto := FCodAux; Commit; VerMensajeFmt('El presupuesto nuevo es el %s', [FCodAux]) end; BuscarPresupuesto; end; procedure TfrPresupuestosClientes.actRefrescarDatosExecute( Sender: TObject); begin FCodigoPresupuesto := TablaPresupuestos.FieldByName('CODIGO').AsString; BuscarPresupuesto; end; procedure TfrPresupuestosClientes.BuscarPropertiesChange(Sender: TObject); begin FiltrarGrid(gridPresupuestos, Buscar.Text); end; procedure TfrPresupuestosClientes.bLimpiarClick(Sender: TObject); begin Buscar.Text := ''; end; procedure TfrPresupuestosClientes.actAnadirReformaExecute(Sender: TObject); begin Contenido := TfrPresupuestoCliente.Create(Self); Contenido.Entidad := entPresupuestoReforma; Contenido.Modo := Anadir; end; end.