{ =============================================================================== Copyright (©) 2003. 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: 09-11-2003 Versión actual: 1.0.4 Fecha versión actual: 17-11-2004 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 19-07-2004 p13. En los menus contextuales deben aparecer las opciones de cortar, copiar y pegar. 05-10-2004 p26. 11-11-2004 p34. Las observaciones en contratos de armarios no funcionaban correctamente. 15-11-2004 Error en SalvarDetalles y SalvarPropiedades para armarios. 17-11-2004 Cuando ha mejorado la inserción de un contrato cuando el código ya ha sido utilizado por otro usuario. =============================================================================== } unit ContratoCliente; interface uses Windows, RdxBarras, RdxBotones, StdCtrls, RdxComboBox, RdxCampos, RdxMemo, RdxTitulos, Controls, ExtCtrls, RdxPaneles, Forms, Classes, RdxFrameContratos, ComCtrls, RdxPageControl, Grids, DBGrids, RXDBCtrl, Db, RdxRichEdit, Graphics, RxMemDS,IBCustomDataSet, Configuracion, Colores, cxDBEdit, cxDropDownEdit, cxCalendar, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxButtonEdit, AdvPanel, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDBData, cxGridLevel, cxClasses, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, cxSpinEdit, ActnList, RdxFrame, cxMemo, cxGridCardView, cxGridDBCardView, TablaArticulos, DBCtrls, ArticuloModelo, Menus, am2000menuitem, am2000popupmenu, am2000, IBQuery, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox, TablaDocumentos, TablaPropiedades, RdxEmpresaActiva, am2000utils, cxCurrencyEdit, RXCtrls, Mask, dbcgrids, cxDataStorage, JvExForms, JvBaseThumbnail, JvThumbViews, JvExComCtrls, JvComCtrls, Dialogs; type TfrContratoCliente = class(TRdxFrameContratos) brSalir: TRdxBarraInferior; bSalir: TRdxBoton; brGuardar: TRdxBarraInferior; bGuardar: TRdxBoton; bCancelar: TRdxBoton; pnlPaginas: TRdxPanel; Paginas: TRdxPagesControl; pagCliente: TTabSheet; pagContenido: TTabSheet; pnlGridArticulos: TPanel; pnlBarraContenido: TRdxPanel; bAnadirCon: TRdxBoton; bEliminar: TRdxBoton; bEliminarTodo: TRdxBoton; dsContrato: TDataSource; dsDetallesContrato: TDataSource; pnlTitulo: TRdxPanelTituloOperacion; pnlCuerpo: TPanel; pnlFactura: TAdvPanel; eCodigo: TLabel; eFechaAlta: TLabel; eSituacion: TLabel; Codigo: TcxDBButtonEdit; FechaContrato: TcxDBDateEdit; cbxSituacion: TcxDBComboBox; Label2: TLabel; CodCliente: TcxDBButtonEdit; eNIFCIF: TLabel; NIFCIF: TcxDBTextEdit; eNumero: TLabel; Numero: TcxDBTextEdit; ePiso: TLabel; Piso: TcxDBTextEdit; CodigoPostal: TcxDBTextEdit; eCodigoPostal: TLabel; eNombre: TLabel; Nombre: TcxDBTextEdit; eDireccion: TLabel; Calle: TcxDBTextEdit; eProvincia: TLabel; Provincia: TcxDBButtonEdit; ePoblacion: TLabel; Poblacion: TcxDBButtonEdit; gridDetalles: TcxGrid; VistaDetalles: TcxGridDBTableView; gridDetallesLevel1: TcxGridLevel; ActionList1: TActionList; actAnadirDetalle: TAction; actEliminarDetalle: TAction; actEliminarTodoDetalle: TAction; pagNotasVarias: TTabSheet; pnlFormasPago: TPanel; RdxPanel4: TPanel; eFormasPago: TLabel; RdxPanel5: TPanel; FormasPago: TcxDBMemo; dsPropiedadesContrato: TDataSource; eDocumento: TLabel; pnlImportes: TAdvPanel; cbxDocumento: TcxDBLookupComboBox; dsDocumentos: TDataSource; TablaDocumentos: TIBQuery; VistaPropiedades: TcxGridDBCardView; VistaPropiedadesDBCardViewRow2: TcxGridDBCardViewRow; VistaPropiedadesDBCardViewRow3: TcxGridDBCardViewRow; TablaPropiedades: TIBQuery; TablaValores: TIBQuery; dsValores: TDataSource; dsPropiedades: TDataSource; Label7: TLabel; Descuento: TcxDBTextEdit; Label8: TLabel; IVA: TcxDBTextEdit; actAnadirPropiedad: TAction; actEliminarPropiedad: TAction; pnlBarraPropiedades: TRdxPanel; bAnadirProp: TRdxBoton; bEliminarProp: TRdxBoton; bSubir: TRdxBoton; bBajar: TRdxBoton; pagPrecios: TTabSheet; pnlPrecios: TPanel; pnlBarraPrecio: TRdxPanel; RdxBoton1: TRdxBoton; RdxBoton2: TRdxBoton; gridPrecios: TDBCtrlGrid; DBEdit1: TDBEdit; DBEdit2: TDBEdit; pnlGrid: TRdxPanel; Label5: TLabel; Label10: TLabel; Label11: TLabel; Label9: TLabel; BaseImponible: TcxDBTextEdit; ImporteDescuento: TcxDBTextEdit; ImporteIVA: TcxDBTextEdit; ImporteTotal: TcxDBTextEdit; eSeccion: TLabel; Seccion: TcxComboBox; pnlObservaciones: TRdxPanel; Label1: TLabel; Observaciones: TcxMemo; eTelefono1: TLabel; Telefono1: TcxDBTextEdit; eTelefono2: TLabel; Telefono2: TcxDBTextEdit; Fax: TcxDBTextEdit; eFax: TLabel; eMovil1: TLabel; Movil1: TcxDBTextEdit; eMovil2: TLabel; Movil2: TcxDBTextEdit; ePersona: TLabel; PersonaContacto: TcxDBTextEdit; pnlContenido: TPanel; pnlPlazosEntrega: TPanel; Panel2: TPanel; ePlazosEntrega: TLabel; Panel3: TPanel; PlazosEntrega: TcxDBMemo; pnlNota: TPanel; Panel4: TPanel; eNota: TLabel; Panel5: TPanel; Nota: TcxDBMemo; pagPlanos: TTabSheet; Panel14: TPanel; Label6: TLabel; RdxBoton3: TRdxBoton; RdxBoton4: TRdxBoton; JvTrackBar1: TJvTrackBar; RdxBoton6: TRdxBoton; tvPlanos: TJvThumbView; OpenDialog1: TOpenDialog; procedure bSalirClick(Sender: TObject); procedure bGuardarClick(Sender: TObject); procedure bCancelarClick(Sender: TObject); procedure CodClienteButtonClick(Sender: TObject); procedure ProvinciaButtonClick(Sender: TObject); procedure PoblacionButtonClick(Sender: TObject); procedure actAnadirDetalleExecute(Sender: TObject); procedure actEliminarDetalleExecute(Sender: TObject); procedure actEliminarTodoDetalleExecute(Sender: TObject); procedure CodClientePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure ProvinciaPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure PoblacionPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure CodigoPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure actEliminarDetalleUpdate(Sender: TObject); procedure actEliminarTodoDetalleUpdate(Sender: TObject); procedure cbXDocumentoPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure actEditarPropiedadesUpdate(Sender: TObject); procedure actAnadirDetalleUpdate(Sender: TObject); procedure TablaDetallesNewRecord(DataSet: TDataSet); procedure actAnadirPropiedadExecute(Sender: TObject); procedure actAnadirPropiedadUpdate(Sender: TObject); procedure actEliminarPropiedadExecute(Sender: TObject); procedure actEliminarPropiedadUpdate(Sender: TObject); procedure actSubirExecute(Sender: TObject); procedure actSubirUpdate(Sender: TObject); procedure actBajarExecute(Sender: TObject); procedure actBajarUpdate(Sender: TObject); procedure gridDetallesResize(Sender: TObject); procedure pnlPreciosResize(Sender: TObject); procedure SeccionPropertiesChange(Sender: TObject); procedure ObservacionesExit(Sender: TObject); procedure VistaPropiedadesDBCardViewRow3CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); procedure pagNotasVariasResize(Sender: TObject); procedure actAnadirPlanoExecute(Sender: TObject); procedure actEliminarPlanoExecute(Sender: TObject); procedure actEliminarPlanoUpdate(Sender: TObject); procedure actRefrescarPlanoExecute(Sender: TObject); procedure actAnadirPlanoUpdate(Sender: TObject); procedure tvPlanosDblClick(Sender: TObject); procedure JvTrackBar1Change(Sender: TObject); private FRootPlanos: Variant; FDirectorio: Variant; FCodigoProvincia : Variant; FCodigoPoblacion : Variant; FCodigoCliente : Variant; FCodigoArticulo : Variant; FTablaDetallesMem : TRxMemoryData; FTablaPropiedadesMem : TRxMemoryData; FObservaciones1 : String; FObservaciones2 : String; procedure CalcularTotalDetalle; procedure CalcularTotalContrato; procedure ActivarEventosCampos; procedure DesactivarEventosCampos; function darRutaPlanosContrato: Variant; function AnadirPlano(RutaPlano: String): Boolean; procedure HabilitarPlanos; procedure DeshabilitarPlanos; function CrearDirPlanos: Boolean; procedure ComprobarEstadoDirPlanos; function EliminarDirPlanos : Boolean; procedure SalvarDetalles; procedure SalvarPropiedades; procedure CargarDetalles; procedure CargarPropiedades; procedure DetalleAfterDelete (DataSet: TDataSet); procedure DetallesAfterInsert(DataSet: TDataSet); procedure PropiedadesAfterDelete (DataSet: TDataSet); procedure PropiedadesAfterInsert(DataSet: TDataSet); procedure CodCliSetText(Sender: TField; const Text: String); procedure ProvinciaSetText(Sender: TField; const Text: String); procedure IVASetText(Sender: TField; const Text: String); procedure DtoSetText(Sender: TField; const Text: String); procedure CodigoArticuloDetalleSetText(Sender: TField; const Text: String); procedure ReferenciaArticuloDetalleSetText(Sender: TField; const Text: String); procedure CantidadDetalleSetText(Sender: TField; const Text: String); procedure PrecioDetalleSetText(Sender: TField; const Text: String); procedure GridBotonCodigoArticuloClick(Sender: TObject; AButtonIndex: Integer); procedure GridBotonReferenciaArticuloClick(Sender: TObject; AButtonIndex: Integer); procedure InsertarPropiedades(NumConcepto : Integer; Seccion : String = ''); procedure CargarPropiedadesArticulo(NumConcepto : Integer; DatosArticulo : TDatosArticulo); procedure BorrarPropiedadesConcepto(NumConcepto : Integer); procedure AsignarNumConceptoDetalles; procedure AsignarNumPropiedad; procedure ReasignarNumConceptoPropiedades(NumConAnt, NumConNue : Integer); procedure SetCodigoProvincia (Value : Variant); virtual; procedure SetCodigoPoblacion (Value : Variant); virtual; procedure SetCodigoCliente (Value : Variant); procedure SetCodigoArticulo (Value : Variant); function ArticuloConPropiedades(NumConcepto : Integer) : Boolean; procedure CargarDatosDocumento(CodigoDocumento : String); procedure CargarPreciosDocumento (CodigoDocumento : String; NumConcepto : Integer); procedure VALORGetProperties( Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; var AProperties: TcxCustomEditProperties); procedure ConfigurarPantallaDocumento; procedure InsertarDetallesDefecto; procedure TablaMemDetallesFilterRecord(DataSet: TDataSet; var Accept: Boolean); procedure TablaMemPropiedadesFilterRecord(DataSet: TDataSet; var Accept: Boolean); protected procedure ActivarModoAnadir; override; procedure ActivarModoModificar; override; procedure ActivarModoConsultar; override; procedure ActivarModoEliminar; override; function AnadirDatos : Boolean; override; function ModificarDatos : Boolean; override; function EliminarDatos : Boolean; override; function CancelarAnadir : Boolean; override; function CancelarModificar : Boolean; override; function CancelarEliminar : Boolean; override; function ComprobarDatos : Boolean; override; procedure VerModal; override; procedure FreeContenido; override; procedure BuscarContrato; override; property CodigoProvincia : Variant read FCodigoProvincia write SetCodigoProvincia; property CodigoPoblacion : Variant read FCodigoPoblacion write SetCodigoPoblacion; property CodigoCliente : Variant read FCodigoCliente write SetCodigoCliente; property CodigoArticulo : Variant read FCodigoArticulo write SetCodigoArticulo; property TablaDetallesMem : TRxMemoryData read FTablaDetallesMem write FTablaDetallesMem; property TablaPropiedadesMem : TRxMemoryData read FTablaPropiedadesMem write FTablaPropiedadesMem; public constructor Create (AOwner : TComponent); override; destructor Destroy; override; published property TablaContratos; property TablaDetallesContratos; property CodigoContrato; end; var frContratoCliente: TfrContratoCliente; implementation {$R *.DFM} uses cxGridDBDataDefinitions, ContratosClientes, BaseDatos, TablaContratos, IBDatabase, Literales, Mensajes, Clientes, RdxFrameProvincias, RdxFramePoblaciones, TablaProvincias, Provincias, Poblaciones, TablaClientes, RdxFrameClientes, IB, Articulos, RdxFrameArticulos, Variants, Entidades, TablaPropiedadesArticulo, StrFunc, Sysutils, TablaPoblaciones, Excepciones, IBErrorCodes, IBSQL, NumFunc, Vendedores, TablaVendedores, PropiedadesArticulo, RdxDBFrame, TablaFamilias, ElegirDireccionCliente, TablaEmpresas, TablaPresupuestos, SysFunc, Constantes, ShellApi; { TfrContratoCliente } procedure TfrContratoCliente.ActivarModoAnadir; var CodNuevo : Variant; begin dsContrato.AutoEdit := True; dsDetallesContrato.AutoEdit := True; dsPropiedadesContrato.AutoEdit := True; Codigo.Properties.Buttons[0].Visible := False; Codigo.Properties.ReadOnly := False; CodCliente.Properties.Buttons[0].Visible := True; Poblacion.Properties.Buttons[0].Visible := True; Provincia.Properties.Buttons[0].Visible := True; DesactivarEventosCampos; try CodNuevo := dmTablaContratos.DarNuevoCodigo; with TablaContratos do begin Close; Prepare; Open; FieldByName('PROVINCIA').OnSetText := ProvinciaSetText; Insert; FCodigoContrato := CodNuevo; Codigo.DataBinding.Field.AsString := FCodigoContrato; Codigo.Properties.ReadOnly := True; FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha; FieldByName('USUARIO').AsString := dmBaseDatos.Usuario; FieldByName('IVA').AsString := EmpresaActiva.IvaDefecto; FechaContrato.DataBinding.Field.AsDateTime := dmBaseDatos.DarFecha; cbxSituacion.DataBinding.Field.AsString := cbxSituacion.Properties.Items[0]; end; with TablaDetallesContratos do begin Close; Params.ByName('CODIGOCONTRATO').AsString := CodNuevo; Prepare; Open; end; with TablaPropiedadesContratos do begin Close; Params.ByName('CODIGOCONTRATO').AsString := CodNuevo; Prepare; Open; end; with TablaDetallesMem do begin Close; Filtered := False; OnFilterRecord := NIL; Open; end; with TablaPropiedadesMem do begin Close; Filtered := False; onFilterRecord := NIL; Open; end; dmTablaContratos.InicializarTablaContratos(@TablaContratos); dmTablaContratos.InicializarTablaDetalles(@TablaDetallesMem); ActivarEdicionGridDetalles(VistaDetalles); cbxDocumento.DataBinding.Field.AsString := dmTablaDocumentos.DarCodigoDocumento(Entidad); CargarDatosDocumento(cbxDocumento.DataBinding.Field.AsString); ConfigurarPantallaDocumento; InsertarDetallesDefecto; with TablaDetallesMem do begin if not (Entidad in [entContratoCliente, entContratoVarios, entContratoElectro]) then begin OnFilterRecord := TablaMemDetallesFilterRecord; Filtered := True; end; end; with TablaPropiedadesMem do begin if (Entidad = entContratoArmarios) then begin OnFilterRecord := TablaMemPropiedadesFilterRecord; Filtered := True; end; end; FObservaciones1 := ''; FObservaciones2 := ''; Observaciones.Lines.Text := ''; //Planos asociados al presupuesto if Entidad = entContratoCocina then CrearDirPlanos; ActivarEventosCampos; Visible := True; FechaContrato.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrContratoCliente.ActivarModoConsultar; begin dsContrato.AutoEdit := False; dsDetallesContrato.AutoEdit := False; dsPropiedadesContrato.AutoEdit := False; Codigo.Properties.Buttons[0].Visible := True; CodCliente.Properties.Buttons[0].Visible := False; Poblacion.Properties.Buttons[0].Visible := False; Provincia.Properties.Buttons[0].Visible := False; try with TablaContratos do begin if RecordCount = 0 then begin VerMensajeFmt(msgCliNoExisteCon, [CodigoContrato]); CloseFrame; Exit; end; Cancel; end; dmTablaContratos.InicializarTablaContratos(@TablaContratos); dmTablaContratos.InicializarTablaDetalles(@TablaDetallesMem); DesactivarEdicionGridDetalles(gridDetalles); Entidad := dmTablaDocumentos.DarEntidadDocumento(entContratoCliente,cbxDocumento.DataBinding.Field.AsString); with TablaDetallesMem do begin if not (Entidad in [entContratoCliente, entContratoVarios, entContratoElectro]) then begin OnFilterRecord := TablaMemDetallesFilterRecord; Filtered := True; end; end; with TablaPropiedadesMem do begin if (Entidad = entContratoArmarios) then begin OnFilterRecord := TablaMemPropiedadesFilterRecord; Filtered := True; end; end; ConfigurarPantallaDocumento; Visible := True; //Documentos asociados al presupuesto if Entidad = entContratoCocina then begin if DirectoryExists(darRutaPlanosContrato) then HabilitarPlanos else DeshabilitarPlanos; end; FechaContrato.SetFocus; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrContratoCliente.ActivarModoEliminar; begin dsContrato.AutoEdit := False; dsDetallesContrato.AutoEdit := False; dsPropiedadesContrato.AutoEdit := False; Codigo.Properties.Buttons[0].Visible := True; CodCliente.Properties.Buttons[0].Visible := False; Poblacion.Properties.Buttons[0].Visible := False; Provincia.Properties.Buttons[0].Visible := False; try with TablaContratos do begin if RecordCount = 0 then begin VerMensajeFmt(msgCliNoExisteCon, [CodigoContrato]); CancelarEliminar; CloseFrame; Exit; end; Cancel; end; dmTablaContratos.InicializarTablaContratos(@TablaContratos); dmTablaContratos.InicializarTablaDetalles(@TablaDetallesMem); Entidad := dmTablaDocumentos.darEntidadDocumento(entContratoCliente, cbxDocumento.DataBinding.Field.AsString); with TablaDetallesMem do begin if not (Entidad in [entContratoCliente, entContratoVarios, entContratoElectro]) then begin OnFilterRecord := TablaMemDetallesFilterRecord; Filtered := True; end; end; with TablaPropiedadesMem do begin if (Entidad = entContratoArmarios) then begin OnFilterRecord := TablaMemPropiedadesFilterRecord; Filtered := True; end; end; ConfigurarPantallaDocumento; DesactivarEdicionGridDetalles(gridDetalles); //Documentos asociados al presupuesto if Entidad = entContratoCocina then begin if DirectoryExists(darRutaPlanosContrato) then HabilitarPlanos else DeshabilitarPlanos; end; Visible := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrContratoCliente.ActivarModoModificar; begin dsContrato.AutoEdit := True; dsDetallesContrato.AutoEdit := True; dsPropiedadesContrato.AutoEdit := True; Codigo.Properties.Buttons[0].Visible := True; Codigo.Properties.ReadOnly := True; CodCliente.Properties.Buttons[0].Visible := True; Poblacion.Properties.Buttons[0].Visible := True; Provincia.Properties.Buttons[0].Visible := True; try with TablaContratos do begin if RecordCount = 0 then begin VerMensajeFmt(msgCliNoExisteCon, [CodigoContrato]); CancelarModificar; CloseFrame; Exit; end; Edit; Post; Edit; end; dmTablaContratos.InicializarTablaContratos(@TablaContratos); dmTablaContratos.InicializarTablaDetalles(@TablaDetallesMem); ActivarEdicionGridDetalles(VistaDetalles); FCodigoProvincia := dmTablaProvincias.DarCodigoProvincia(Provincia.Text); Entidad := dmTablaDocumentos.darEntidadDocumento(entContratoCliente, cbxDocumento.DataBinding.Field.AsString); with TablaDetallesMem do begin if not (Entidad in [entContratoCliente, entContratoVarios, entContratoElectro]) then begin OnFilterRecord := TablaMemDetallesFilterRecord; Filtered := True; end; end; with TablaPropiedadesMem do begin if (Entidad = entContratoArmarios) then begin OnFilterRecord := TablaMemPropiedadesFilterRecord; Filtered := True; end; end; ActivarEventosCampos; ConfigurarPantallaDocumento; Visible := True; //Documentos asociados al contrato if Entidad = entContratoCocina then CrearDirPlanos; FechaContrato.SetFocus; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : begin VerMensajeFmt(msgCliConBloqueado, [CodigoContrato]); CancelarModificar; CloseFrame; Exit; end else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; function TfrContratoCliente.AnadirDatos: Boolean; var CodAux : String; begin try CalcularTotalContrato; TablaContratos.Post; BorrarTabla(TablaDetallesContratos); SalvarDetalles; BorrarTabla(TablaPropiedadesContratos); SalvarPropiedades; dmTablaContratos.IncrementarCodigo; Commit; FCodigoContrato := TablaContratos.FieldByName('CODIGO').AsString; ComprobarEstadoDirPlanos; Result := True; except on E : EIBError do begin if E.IBErrorCode = isc_unique_key_violation then begin // El código ya se ha utilizado TablaContratos.Edit; CodAux := dmTablaContratos.DarNuevoCodigo; VerMensajeFmt(msgCliCodConRepetido, [Codigo.DataBinding.Field.AsString, CodAux]); Codigo.DataBinding.Field.AsString := CodAux; end else TratarExcepcion(E); end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrContratoCliente.BuscarContrato; begin if Transaccion = NIL then Exit; try TablaContratos.DisableControls; TablaDetallesContratos.DisableControls; TablaDetallesMem.DisableControls; TablaPropiedadesContratos.DisableControls; TablaPropiedadesMem.DisableControls; DesactivarEventosCampos; TablaContratos.Close; TablaDetallesContratos.Close; TablaPropiedadesMem.Close; with TablaDetallesMem do begin Close; Filtered := False; OnFilterRecord := NIL; end; with TablaPropiedadesContratos do begin Close; Filtered := False; OnFilterRecord := NIL; end; // Buscar la fila a tratar si es necesario if not EsCadenaVacia(FCodigoContrato) then begin TablaContratos.Params.ByName('CODIGO').AsString := FCodigoContrato; TablaDetallesContratos.Params.ByName('CODIGOCONTRATO').AsString := FCodigoContrato; TablaPropiedadesContratos.Params.ByName('CODIGOCONTRATO').AsString := FCodigoContrato; end; TablaContratos.Prepare; TablaContratos.Open; Entidad := dmTablaDocumentos.DarEntidadDocumento(entContratoCliente,TablaContratos.FieldByName('CODIGODOCUMENTO').AsString); TablaDetallesContratos.Prepare; TablaDetallesContratos.Open; TablaPropiedadesContratos.Prepare; TablaPropiedadesContratos.Open; TablaDetallesMem.Open; CargarDetalles; if not (Entidad in [entContratoCliente, entContratoVarios, entContratoElectro]) then begin with TablaDetallesMem do begin First; FObservaciones1 := FieldByName('OBSERVACIONES').AsString; Observaciones.Lines.Clear; Observaciones.Lines.Text := FObservaciones1; if Entidad = entContratoArmarios then begin Next; FObservaciones2 := FieldByName('OBSERVACIONES').AsString; end; end; TablaDetallesMem.OnFilterRecord := TablaMemDetallesFilterRecord; TablaDetallesMem.Filtered := True; end; TablaPropiedadesMem.Open; CargarPropiedades; if Entidad = entContratoArmarios then begin TablaDetallesMem.OnFilterRecord := TablaMemPropiedadesFilterRecord; TablaDetallesMem.Filtered := True; end; if not TablaDocumentos.Active then TablaDocumentos.Open; dmTablaContratos.InicializarTablaContratos(@TablaContratos); dmTablaContratos.InicializarTablaDetalles(@TablaDetallesMem); ActivarEventosCampos; TablaContratos.EnableControls; TablaDetallesContratos.EnableControls; TablaDetallesMem.EnableControls; TablaPropiedadesContratos.EnableControls; TablaPropiedadesMem.EnableControls; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrContratoCliente.CalcularTotalDetalle; var auxCantidad, auxPrecio, auxTotal : double; begin with TablaDetallesMem do begin Edit; auxCantidad := FieldByName('CANTIDAD').AsFloat; auxPrecio := FieldByName('IMPORTEUNIDAD').AsFloat; auxTotal := (auxCantidad * auxPrecio); FieldByName('IMPORTETOTAL').AsFloat := auxTotal; end; CalcularTotalContrato; end; procedure TfrContratoCliente.CalcularTotalContrato; var BaseImponible, ImporteIVA, ImporteDto, ImporteTotal : Double; FDetallesBookmark : string; begin BaseImponible := 0; ImporteTotal := 0; with TablaDetallesMem do begin DisableControls; FDetallesBookmark := Bookmark; try First; while not EOF do begin BaseImponible := BaseImponible + FieldByName('IMPORTETOTAL').AsFloat; Next; end; ImporteDto := BaseImponible * (TablaContratos.FieldByName('DESCUENTO').AsFloat/100); ImporteTotal := BaseImponible - ImporteDto; ImporteIVA := ImporteTotal * (TablaContratos.FieldByName('IVA').AsFloat/100); ImporteTotal := ImporteTotal + ImporteIVA; TablaContratos.Edit; TablaContratos.FieldByName('BASEIMPONIBLE').AsFloat := BaseImponible; TablaContratos.FieldByName('IMPORTEDESCUENTO').AsFloat := ImporteDto; TablaContratos.FieldByName('IMPORTEIVA').AsFloat := ImporteIVA; TablaContratos.FieldByName('IMPORTETOTAL').AsFloat := ImporteTotal; finally Bookmark := FDetallesBookmark; EnableControls; end; end; end; function TfrContratoCliente.CancelarAnadir: Boolean; begin Result := False; try TablaContratos.Cancel; TablaDetallesMem.Cancel; TablaPropiedadesMem.Cancel; RollBack; if Entidad = entContratoCocina then EliminarDirPlanos; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrContratoCliente.CancelarEliminar: Boolean; begin Result := False; try RollBack; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrContratoCliente.CancelarModificar: Boolean; begin Result := False; try TablaContratos.Cancel; TablaDetallesMem.Cancel; TablaPropiedadesMem.Cancel; RollBack; ComprobarEstadoDirPlanos; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; function TfrContratoCliente.ComprobarDatos: Boolean; var AuxNumDetalles : integer; begin Result := False; if not (Modo in [Anadir, Modificar]) then begin Result := True; exit; end; if EsCadenaVacia(FechaContrato.DataBinding.Field.AsString) then begin VerMensaje(msgCliFaltaFechaAltaCon); FechaContrato.SetFocus; Exit; end; if Modo = Anadir then begin if EsCadenaVacia(CodCliente.DataBinding.Field.AsString) then begin VerMensaje(msgCliFaltaCodCli); Paginas.ActivePageIndex := 0; CodCliente.SetFocus; Exit; end end else begin if EsCadenaVacia(Nombre.DataBinding.Field.AsString) then begin VerMensaje(msgCliFaltaNombreCli); Paginas.ActivePageIndex := 0; Nombre.SetFocus; Exit; end end; if TablaDetallesMem.IsEmpty then begin VerMensaje(msgCliFaltaArticulosCon); Paginas.ActivePageIndex := 1; gridDetalles.SetFocus; Exit end; Result := True; end; constructor TfrContratoCliente.Create(AOwner: TComponent); begin inherited Create(AOwner); Entidad := entContratoCliente; FCodigoProvincia := NULL; FCodigoPoblacion := NULL; FCodigoCliente := NULL; FCodigoArticulo := NULL; BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaContratos := TIBDataSet.Create(Self); TablaDetallesContratos := TIBDataSet.Create(Self); TablaPropiedadesContratos := TIBDataSet.Create(Self); TablaDetallesMem := TRxMemoryData.Create(Self); TablaPropiedadesMem := TRxMemoryData.Create(Self); dsContrato.DataSet := TablaContratos; dsDetallesContrato.DataSet := TablaDetallesMem; dsPropiedadesContrato.DataSet := TablaPropiedadesMem; FRootPlanos := dmBaseDatos.DarValorConfiguracion(CTE_PLANOS); FDirectorio := ''; with TablaDocumentos do begin Database := BaseDatos; Transaction := Transaccion; end; with TablaContratos do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaContratos.sqlConsultarContrato); InsertSQL.Assign(dmTablaContratos.sqlInsertarContrato); ModifySQL.Assign(dmTablaContratos.sqlModificarContrato); DeleteSQL.Assign(dmTablaContratos.sqlEliminarContrato); RefreshSQL.Assign(dmTablaContratos.sqlConsultarContrato); end; with TablaDetallesContratos do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaContratos.sqlConsultarGridDetalles); InsertSQL.Assign(dmTablaContratos.sqlInsertarDetalles); ModifySQL.Assign(dmTablaContratos.sqlModificarDetalles); DeleteSQL.Assign(dmTablaContratos.sqlEliminarDetalles); RefreshSQL.Assign(dmTablaContratos.sqlConsultarDetalles); end; with TablaPropiedadesContratos do begin Database := BaseDatos; Transaction := Transaccion; SelectSQL.Assign(dmTablaContratos.sqlConsultarGridPropiedades); InsertSQL.Assign(dmTablaContratos.sqlInsertarPropiedades); ModifySQL.Assign(dmTablaContratos.sqlModificarPropiedades); DeleteSQL.Assign(dmTablaContratos.sqlEliminarPropiedades); RefreshSQL.Assign(dmTablaContratos.sqlConsultarPropiedades); end; with TablaPropiedades do begin Database := BaseDatos; Transaction := Transaccion; Open; end; with TablaValores do begin Database := BaseDatos; Transaction := Transaccion; end; with TablaDetallesMem do begin CopyStructure(TablaDetallesContratos); end; with TablaPropiedadesMem do begin CopyStructure(TablaPropiedadesContratos); end; dmTablaContratos.InicializarGridPropiedades(VistaPropiedades); with TcxLookupComboBoxProperties(VistaPropiedades.GetRowByFieldName('CODIGOPROPIEDAD').Properties) do begin ListSource := dsPropiedades; end; VistaPropiedades.GetRowByFieldName('VALOR').OnGetProperties := VALORGetProperties; dmTablaContratos.InicializarGridDetalles(VistaDetalles); cbxSituacion.Properties.Items := dmTablaContratos.DarSituaciones; dmTablaArticulos.ArtModelo := entArticulo; Paginas.ActivePage := pagCliente; end; destructor TfrContratoCliente.Destroy; begin TablaDocumentos.Close; TablaPropiedades.Close; TablaValores.Close; TablaDetallesMem.Close; TablaDetallesMem.Free; TablaPropiedadesMem.Close; TablaPropiedadesMem.Free; TablaContratos.Close; TablaContratos.UnPrepare; TablaContratos.Free; TablaDetallesContratos.Close; TablaDetallesContratos.Unprepare; TablaDetallesContratos.Free; TablaPropiedadesContratos.Close; TablaPropiedadesContratos.UnPrepare; TablaPropiedadesContratos.Free; inherited; end; function TfrContratoCliente.EliminarDatos: Boolean; var Cadena : String; begin Result := False; try if Entidad = entContratoCocina then begin Cadena := PathDelim + StringReplace(CodigoContrato,'/','',[rfReplaceAll]); // No elimino si el contrato viene de un presupuesto para que los planos // sigan apareciendo en el presupuesto. if Cadena = dmTablaContratos.DarRutaPlanos(CodigoContrato) then EliminarDirPlanos; end; TablaContratos.Delete; BorrarTabla(TablaDetallesMem); BorrarTabla(TablaPropiedadesMem); Commit; Result := True; except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : VerMensajeFmt(msgCliConBloqueado, [Codigo.DataBinding.Field.AsString]); else TratarExcepcion(E); end; end; on E : Exception do TratarExcepcion(E); end; end; procedure TfrContratoCliente.FreeContenido; var Contador : integer; AListaCodigos : TStringList; begin if (ContenidoModal is TRdxFrameContratos) then begin CodigoContrato := (ContenidoModal as TRdxFrameContratos).CodigoContrato; ActivarModo; end; if (ContenidoModal is TRdxFrameClientes) then CodigoCliente := (ContenidoModal as TRdxFrameClientes).CodigoCliente; if (ContenidoModal is TRdxFrameProvincias) then CodigoProvincia := (ContenidoModal as TRdxFrameProvincias).CodigoProvincia; if (ContenidoModal is TfrArticulos) then begin //CodigoArticulo := (ContenidoModal as TRdxFrameArticulos).CodigoArticulo; AListaCodigos := (ContenidoModal as TfrArticulos).ListaArticulos; for Contador := AListaCodigos.Count - 1 downto 0 do begin CodigoArticulo := AListaCodigos.Strings[Contador]; actAnadirDetalle.Execute; end; TablaDetallesMem.Delete; end; if (ContenidoModal is TRdxFramePoblaciones) then begin CodigoProvincia := (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia; CodigoPoblacion := (ContenidoModal as TRdxFramePoblaciones).CodigoPoblacion; end; inherited FreeContenido; end; function TfrContratoCliente.ModificarDatos: Boolean; begin Result := False; try CalcularTotalContrato; TablaContratos.Post; BorrarTabla(TablaDetallesContratos); SalvarDetalles; BorrarTabla(TablaPropiedadesContratos); SalvarPropiedades; Commit; ComprobarEstadoDirPlanos; Result := True; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrContratoCliente.SetCodigoArticulo(Value: Variant); var CodigoAux : String; DatosArticulo : TDatosArticulo; begin if (EsCadenaVacia(Value)) then begin FCodigoArticulo := CodigoAux; Exit; end; CodigoAux := Trim(Value); if (dmTablaArticulos.ValidarCodigo(CodigoAux)) then begin CodigoAux := dmTablaArticulos.FormatearCodigo(CodigoAux); if (dmTablaArticulos.ExisteCodigo(CodigoAux)) then FCodigoArticulo := CodigoAux else begin raise Exception.CreateFmt(msgDatosCodArtNoExiste, [CodigoAux]); end; end else begin raise Exception.CreateFmt(msgDatosCodArtIncorrecto, [CodigoAux]); Exit; end; DatosArticulo := TDatosArticulo.Create(CodigoAux); try with TablaDetallesMem do begin Edit; FieldByName('CODIGOCONTRATO').AsString := Codigo.DataBinding.Field.AsString; FieldByName('NUMCONCEPTO').AsInteger := RecNo; FieldByName('CODIGOARTICULO').AsString := DatosArticulo.Codigo; FieldByName('REFERENCIA').AsString := DatosArticulo.Referencia; FieldByName('DESCRIPCION').AsString := DatosArticulo.Descripcion; FieldByName('TIPOCONCEPTO').AsVariant := ''; FieldByName('IMPORTEUNIDAD').AsFloat := DatosArticulo.Precio; if EsCadenaVacia(FieldByName('CANTIDAD').AsString) then FieldByName('CANTIDAD').AsString := '1'; Post; InsertarPropiedades(FieldByName('NUMCONCEPTO').AsInteger); gridDetalles.Refresh; CalcularTotalDetalle; end; FCodigoArticulo := Value; finally DatosArticulo.Free; end; end; procedure TfrContratoCliente.SetCodigoCliente(Value: Variant); var DatosCliente : TDatosCliente; CodAux : Variant; DireccionElegida : TDireccionElegida; NumSucursal : Integer; begin if EsCadenaVacia(Value) then exit; CodAux := Trim(Value); if (dmTablaClientes.ValidarCodigo(CodAux)) then begin CodAux := dmTablaClientes.FormatearCodigo(CodAux); if (dmTablaClientes.ExisteCodigo(CodAux)) then FCodigoCliente := CodAux else begin raise Exception.CreateFmt(msgCliCodCliNoExiste, [CodAux]); end; end else begin raise Exception.CreateFmt(msgCliCodCliIncorrecto, [CodAux]); end; DatosCliente := TDatosCliente.Create(FCodigoCliente); try CodCliente.DataBinding.Field.AsString := DatosCliente.Codigo; if DatosCliente.Sucursales.Count > 0 then begin frElegirDireccionCliente := TfrElegirDireccionCliente.Create(Self); try frElegirDireccionCliente.Cliente := DatosCliente; frElegirDireccionCliente.ShowModal; DireccionElegida := frElegirDireccionCliente.DireccionSeleccionada; NumSucursal := frElegirDireccionCliente.NumSucursal; finally frElegirDireccionCliente.Free; end; end else DireccionElegida := dePrincipal; if DireccionElegida = dePrincipal then begin NIFCIF.DataBinding.Field.AsString := DatosCliente.Nifcif; Nombre.DataBinding.Field.AsString := DatosCliente.Nombre; Calle.DataBinding.Field.AsString := DatosCliente.Calle; Numero.DataBinding.Field.AsString := DatosCliente.Numero; Piso.DataBinding.Field.AsString := DatosCliente.Piso; Provincia.DataBinding.Field.AsString := DatosCliente.Provincia; FCodigoProvincia := dmTablaProvincias.DarCodigoProvincia(DatosCliente.Provincia); Poblacion.DataBinding.Field.AsString := DatosCliente.Poblacion; CodigoPostal.DataBinding.Field.AsString := DatosCliente.CodigoPostal; Telefono1.DataBinding.Field.AsString := DatosCliente.Telefono1; Telefono2.DataBinding.Field.AsString := DatosCliente.Telefono2; Movil1.DataBinding.Field.AsString := DatosCliente.Movil1; Movil2.DataBinding.Field.AsString := DatosCliente.Movil2; Fax.DataBinding.Field.AsString := DatosCliente.Fax; PersonaContacto.DataBinding.Field.AsString := DatosCliente.PersonaContacto; end else begin with DatosCliente.Sucursales do begin NIFCIF.DataBinding.Field.AsString := Sucursal[NumSucursal].Nifcif; Nombre.DataBinding.Field.AsString := Sucursal[NumSucursal].Nombre; Calle.DataBinding.Field.AsString := Sucursal[NumSucursal].Calle; Numero.DataBinding.Field.AsString := Sucursal[NumSucursal].Numero; Piso.DataBinding.Field.AsString := Sucursal[NumSucursal].Piso; Provincia.DataBinding.Field.AsString := Sucursal[NumSucursal].Provincia; FCodigoProvincia := dmTablaProvincias.DarCodigoProvincia(Sucursal[NumSucursal].Provincia); Poblacion.DataBinding.Field.AsString := Sucursal[NumSucursal].Poblacion; CodigoPostal.DataBinding.Field.AsString := Sucursal[NumSucursal].CodigoPostal; Telefono1.DataBinding.Field.AsString := Sucursal[NumSucursal].Telefono1; Telefono2.DataBinding.Field.AsString := Sucursal[NumSucursal].Telefono2; Movil1.DataBinding.Field.AsString := Sucursal[NumSucursal].Movil1; Movil2.DataBinding.Field.AsString := Sucursal[NumSucursal].Movil2; Fax.DataBinding.Field.AsString := Sucursal[NumSucursal].Fax; PersonaContacto.DataBinding.Field.AsString := Sucursal[NumSucursal].PersonaContacto; end; end; finally DatosCliente.Free; end; end; procedure TfrContratoCliente.SetCodigoPoblacion(Value: Variant); begin if (not EsCadenaVacia(Value)) then begin FCodigoPoblacion := Value; Poblacion.DataBinding.Field.AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvincia, FCodigoPoblacion); end; end; procedure TfrContratoCliente.SetCodigoProvincia(Value: Variant); begin if (not EsCadenaVacia(Value)) then begin FCodigoProvincia := Value; Provincia.DataBinding.Field.AsString := dmTablaProvincias.DarNombreProvincia(FCodigoProvincia); end; end; procedure TfrContratoCliente.VerModal; var DatosFamilia : TDatosFamilia; begin if (ContenidoModal is TRdxFramePoblaciones) then (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := CodigoProvincia; if (ContenidoModal is TRdxFrameClientes) then (ContenidoModal as TRdxFrameClientes).CodigoCliente := CodigoCliente; if (ContenidoModal is TfrArticulos) then begin FCodigoArticulo := TablaDetallesMem.FieldByName('CODIGOARTICULO').AsString; if EsCadenaVacia(FCodigoArticulo) then (ContenidoModal as TfrArticulos).Familia := TablaDocumentos.FieldByName('DESCFAMILIA').AsString else begin //DatosFamilia := TDatosFamilia.Create(TablaDetallesMem.FieldByName('FAMILIA').AsInteger); try //(ContenidoModal as TfrArticulos).Familia := DatosFamilia.Descripcion; (ContenidoModal as TfrArticulos).CodigoArticulo := FCodigoArticulo; finally //DatosFamilia.Free; end; end; end; inherited; end; procedure TfrContratoCliente.bSalirClick(Sender: TObject); begin try Rollback; CloseFrame; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrContratoCliente.bGuardarClick(Sender: TObject); begin if (RealizarOperacion) then CloseFrame; end; procedure TfrContratoCliente.bCancelarClick(Sender: TObject); begin if (TratarCambios = IDOK) then CloseFrame; end; procedure TfrContratoCliente.CodClienteButtonClick(Sender: TObject); begin ContenidoModal := TfrClientes.Create(Self); end; procedure TfrContratoCliente.CodigoArticuloDetalleSetText( Sender: TField; const Text: String); begin Sender.AsString := Text; CodigoArticulo := Text; end; procedure TfrContratoCliente.CantidadDetalleSetText(Sender: TField; const Text: String); begin if EsCadenaVacia(Text) then Sender.AsString := '1' else Sender.AsString := Text; CalcularTotalDetalle; end; procedure TfrContratoCliente.PrecioDetalleSetText(Sender: TField; const Text: String); begin if EsCadenaVacia(Text) then Sender.AsString := '0' else Sender.AsString := Text; CalcularTotalDetalle; end; procedure TfrContratoCliente.ProvinciaButtonClick(Sender: TObject); begin CaptionModal := msgListaProvincias; WidthModal := 280; HeightModal := 460; ContenidoModal := TfrProvincias.Create(Self); end; procedure TfrContratoCliente.PoblacionButtonClick(Sender: TObject); begin if (EsCadenaVacia(CodigoProvincia)) then begin VerMensaje(msgSinProvincia); Paginas.ActivePageIndex := 0; Provincia.SetFocus; Exit; end; CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.darNombreProvincia(CodigoProvincia)]); WidthModal := 280; HeightModal := 460; ContenidoModal := TfrPoblaciones.Create(Self); end; procedure TfrContratoCliente.ActivarEventosCampos; begin with TablaContratos do begin FieldByName('CODIGOCLIENTE').OnSetText := CodCliSetText; FieldByName('IVA').OnSetText := IVASetText; FieldByName('DESCUENTO').OnSetText := DtoSetText; end; with TablaDetallesMem do begin FieldByName('CODIGOARTICULO').OnSetText := CodigoArticuloDetalleSetText; FieldByName('REFERENCIA').OnSetText := ReferenciaArticuloDetalleSetText; FieldByName('CANTIDAD').OnSetText := CantidadDetalleSetText; FieldByName('IMPORTEUNIDAD').OnSetText := PrecioDetalleSetText; AfterDelete := DetalleAfterDelete; AfterInsert := DetallesAfterInsert; end; with TablaPropiedadesMem do begin AfterInsert := PropiedadesAfterInsert; AfterDelete := PropiedadesAfterDelete; end; with VistaDetalles do begin TcxButtonEditProperties(GetColumnByFieldName('CODIGOARTICULO').Properties).OnButtonClick := GridBotonCodigoArticuloClick; TcxButtonEditProperties(GetColumnByFieldName('REFERENCIA').Properties).OnButtonClick := GridBotonReferenciaArticuloClick; end; end; procedure TfrContratoCliente.SalvarDetalles; var NumeroCampo : Integer; begin try with TablaDetallesMem do begin DisableControls; Filtered := False; First; while not EOF do begin TablaDetallesContratos.Append; for NumeroCampo := 0 to FieldCount-1 do begin if Fields[NumeroCampo].FieldName = 'CODIGOCONTRATO' then TablaDetallesContratos.Fields[NumeroCampo].AsString := Codigo.DataBinding.Field.AsString else if Fields[NumeroCampo].FieldName = 'NUMCONCEPTO' then TablaDetallesContratos.Fields[NumeroCampo].AsInteger := RecNo - 1 else TablaDetallesContratos.Fields[NumeroCampo].AsVariant := Fields[NumeroCampo].AsVariant; end; if (RecNo-1 = 0) and (not (Entidad in [entContratoCliente, entContratoVarios, entContratoElectro])) then TablaDetallesContratos.FieldByName('OBSERVACIONES').AsString := FObservaciones1; if (RecNo-1 = 1) and (Entidad = entContratoArmarios) then TablaDetallesContratos.FieldByName('OBSERVACIONES').AsString := FObservaciones2; TablaDetallesContratos.Post; Next; end; EnableControls; end except on E : EIBError do begin if E.IBErrorCode = isc_unique_key_violation then begin TablaDetallesContratos.Delete; TablaDetallesMem.EnableControls; end; raise EIBError.Create(E.SQLCode, E.IBErrorCode, E.Message); end; end; end; procedure TfrContratoCliente.CargarDetalles; var NumeroCampo : Integer; begin with TablaDetallesMem do begin if TablaDetallesContratos.IsEmpty then Exit; DisableControls; TablaDetallesContratos.First; while not TablaDetallesContratos.EOF do begin Append; for NumeroCampo := 0 to TablaDetallesContratos.FieldCount-1 do Fields[NumeroCampo].AsString := TablaDetallesContratos.Fields[NumeroCampo].AsString; Post; TablaDetallesContratos.Next; end; First; EnableControls; end; end; procedure TfrContratoCliente.CargarPropiedades; var NumeroCampo : Integer; begin with TablaPropiedadesMem do begin if TablaPropiedadesContratos.IsEmpty then Exit; DisableControls; TablaPropiedadesContratos.First; while not TablaPropiedadesContratos.EOF do begin Append; for NumeroCampo := 0 to TablaPropiedadesContratos.FieldCount-1 do Fields[NumeroCampo].AsString := TablaPropiedadesContratos.Fields[NumeroCampo].AsString; Post; TablaPropiedadesContratos.Next; end; First; EnableControls; end; end; procedure TfrContratoCliente.DetalleAfterDelete(DataSet: TDataSet); begin AsignarNumConceptoDetalles; CalcularTotalContrato; end; procedure TfrContratoCliente.actAnadirDetalleExecute(Sender: TObject); begin try with TablaDetallesMem do begin Next; if EOF then Append else begin Prior; Insert; end; end; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrContratoCliente.actEliminarDetalleExecute(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrar) <> IDYES) then Exit; if TablaDetallesMem.RecordCount = 0 then begin { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } TablaDetallesMem.Cancel; Exit end; try BorrarPropiedadesConcepto(TablaDetallesMem.FieldByName('NUMCONCEPTO').AsVariant); TablaDetallesMem.Delete; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; CalcularTotalContrato; end; procedure TfrContratoCliente.ProvinciaSetText(Sender: TField; const Text: String); begin FCodigoProvincia := dmTablaProvincias.DarCodigoProvincia(Text); Sender.AsString := Text; end; procedure TfrContratoCliente.actEliminarTodoDetalleExecute(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrarTodo) <> IDYES) then Exit; BorrarTabla(TablaDetallesMem); BorrarTabla(TablaPropiedadesMem); CalcularTotalContrato; end; procedure TfrContratoCliente.DtoSetText(Sender: TField; const Text: String); begin if EsCadenaVacia(Text) then Sender.AsString := '0' else begin ValidarDto(Text); Sender.AsString := Text; end; CalcularTotalContrato; end; procedure TfrContratoCliente.IVASetText(Sender: TField; const Text: String); begin if EsCadenaVacia(Text) then Sender.AsString := '0' else begin ValidarIVA(Text); Sender.AsString := Text; end; CalcularTotalContrato; end; procedure TfrContratoCliente.DetallesAfterInsert(DataSet: TDataSet); begin with DataSet do begin Edit; FieldByName('CODIGOCONTRATO').AsString := Codigo.DataBinding.Field.AsString; FieldByName('NUMCONCEPTO').AsInteger := RecNo; FieldByName('DESCRIPCION').AsString := ''; if EsCadenaVacia(FieldByName('CANTIDAD').AsString) then FieldByName('CANTIDAD').AsString := '1'; if (Entidad in [entContratoCliente, entContratoVarios, entContratoElectro]) then FieldByName('TIPOCONCEPTO').AsVariant := '' else FieldByName('TIPOCONCEPTO').AsVariant := 'PRECIO'; Post; AsignarNumConceptoDetalles; Edit; end; end; procedure TfrContratoCliente.CodClientePropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin ContenidoModal := TfrClientes.Create(Self); end; procedure TfrContratoCliente.ProvinciaPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin CaptionModal := msgListaProvincias; WidthModal := 280; HeightModal := 460; ContenidoModal := TfrProvincias.Create(Self); end; procedure TfrContratoCliente.PoblacionPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin if EsCadenaVacia(CodigoProvincia) then begin VerMensaje(msgSinProvincia); Paginas.ActivePageIndex := 0; Provincia.SetFocus; Exit; end; CaptionModal := Format(msgListaPoblaciones, [dmTablaProvincias.darNombreProvincia(CodigoProvincia)]); WidthModal := 280; HeightModal := 460; ContenidoModal := TfrPoblaciones.Create(Self); end; procedure TfrContratoCliente.GridBotonCodigoArticuloClick( Sender: TObject; AButtonIndex: Integer); begin TablaDetallesMem.Edit; ContenidoModal := TfrArticulos.Create(Self); gridDetalles.SetFocus; end; procedure TfrContratoCliente.InsertarPropiedades(NumConcepto : Integer; Seccion : String); var DatosDocumento : TDocumento; Contador : Integer; FPropiedad : TDatosPropiedad; FNumPropiedad : Integer; begin with TablaPropiedadesMem do begin DisableControls; DatosDocumento := TDocumento.Create(TablaContratos.FieldByName('CODIGODOCUMENTO').AsString); try BorrarPropiedadesConcepto(NumConcepto); FNumPropiedad := 0; First; for Contador := 0 to (DatosDocumento.ListaPropiedades.Count - 1) do begin FPropiedad := DatosDocumento.ListaPropiedades.Items[Contador]; if (not EsCadenaVacia(Seccion)) and (FPropiedad.Seccion <> Seccion) then Continue else begin Append; FieldByName('CODIGOCONTRATO').AsString := CodigoContrato; FieldByName('NUMCONCEPTO').AsInteger := NumConcepto; FieldByName('NUMPROPIEDAD').AsInteger := FNumPropiedad; FieldByName('CODIGOPROPIEDAD').AsInteger := FPropiedad.CodigoPropiedad; FieldByName('VALOR').AsString := FPropiedad.Valor; Post; FNumPropiedad := FNumPropiedad + 1; end; end; First; finally DatosDocumento.Free; EnableControls; end; end; end; procedure TfrContratoCliente.SalvarPropiedades; var NumeroCampo : Integer; begin try with TablaPropiedadesMem do begin DisableControls; Filtered := False; First; while not EOF do begin if not EsCadenaVacia(FieldByName('CODIGOPROPIEDAD').AsVariant) then begin TablaPropiedadesContratos.Append; for NumeroCampo := 0 to FieldCount-1 do begin if Fields[NumeroCampo].FieldName = 'CODIGOCONTRATO' then TablaPropiedadesContratos.Fields[NumeroCampo].AsString := Codigo.DataBinding.Field.AsString else TablaPropiedadesContratos.Fields[NumeroCampo].AsVariant := Fields[NumeroCampo].AsVariant; end; TablaPropiedadesContratos.Post; end; Next; end; EnableControls; end except on E : EIBError do begin if E.IBErrorCode = isc_unique_key_violation then begin TablaPropiedadesContratos.Delete; TablaPropiedadesMem.EnableControls; end; raise EIBError.Create(E.SQLCode, E.IBErrorCode, E.Message); end; end; end; procedure TfrContratoCliente.BorrarPropiedadesConcepto( NumConcepto: Integer); begin with TablaPropiedadesMem do begin if IsEmpty then Exit; DisableControls; try Last; while not BOF do begin if FieldByName('NUMCONCEPTO').AsInteger = NumConcepto then Delete; Prior; end; if FieldByName('NUMCONCEPTO').AsInteger = NumConcepto then Delete; finally EnableControls; end; end; end; procedure TfrContratoCliente.AsignarNumConceptoDetalles; var FDetallesBookmark : string; NumConAnt, NumConNue : Integer; begin with TablaDetallesMem do begin DisableControls; FDetallesBookmark := Bookmark; try Last; while not BOF do begin Edit; NumConAnt := FieldByName('NUMCONCEPTO').AsInteger; NumConNue := RecNo; FieldByName('NUMCONCEPTO').AsInteger := NumConNue; Post; ReasignarNumConceptoPropiedades(NumConAnt, NumConNue); Prior; end; finally EnableControls; Bookmark := FDetallesBookmark; end; end; end; procedure TfrContratoCliente.ReasignarNumConceptoPropiedades(NumConAnt, NumConNue: Integer); begin if NumConAnt = NumConNue then exit; with TablaPropiedadesMem do begin DisableControls; try First; while not EOF do begin if FieldByName('NUMCONCEPTO').AsInteger = NumConAnt then begin Edit; FieldByName('NUMCONCEPTO').AsInteger := NumConNue; Post; end; Next; end; finally EnableControls; end; end; end; procedure TfrContratoCliente.PropiedadesAfterInsert(DataSet: TDataSet); begin with DataSet do begin FieldByName('CODIGOCONTRATO').AsString := TablaDetallesMem.FieldByName('CODIGOCONTRATO').AsString; if Entidad in [entContratoCocina, entContratoBano] then FieldByName('NUMCONCEPTO').AsInteger := 0 else begin if Entidad = entContratoArmarios then FieldByName('NUMCONCEPTO').AsInteger := Seccion.ItemIndex else FieldByName('NUMCONCEPTO').AsInteger := TablaDetallesMem.FieldByName('NUMCONCEPTO').AsInteger; end; Post; AsignarNumPropiedad; Edit; end; end; procedure TfrContratoCliente.CodigoPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin if (TratarCambios = IDCANCEL) then exit; { Esto es porque en modo 'Modificar' hacemos un cambio y pulsamos este botón se cierra la tabla y si en el frame hijo (el del grid) damos a cancelar, FCodigoCliente es NULL y da error al activar modo porque no se inicializa los parámetros de la sql. Lo hace BuscarCliente. } { if not TablaContratos.Active then BuscarContrato;} ContenidoModal := TfrContratosClientes.Create(Self); end; procedure TfrContratoCliente.DesactivarEventosCampos; begin with TablaContratos do begin if FindField('CODIGOCLIENTE') <> NIL then FieldByName('CODIGOCLIENTE').OnSetText := NIL; if FindField('IVA') <> NIL then FieldByName('IVA').OnSetText := NIL; if FindField('DESCUENTO') <> NIL then FieldByName('DESCUENTO').OnSetText := NIL; end; with TablaDetallesMem do begin if FindField('CODIGOARTICULO') <> NIL then FieldByName('CODIGOARTICULO').OnSetText := NIL; if FindField('REFERENCIA') <> NIL then FieldByName('REFERENCIA').OnSetText := NIL; if FindField('CANTIDAD') <> NIL then FieldByName('CANTIDAD').OnSetText := NIL; if FindField('IMPORTEUNIDAD') <> NIL then FieldByName('IMPORTEUNIDAD').OnSetText := NIL; AfterDelete := NIL; AfterInsert := NIL; end; with TablaPropiedadesMem do begin AfterInsert := NIL; end; with VistaDetalles do begin if GetColumnByFieldName('CODIGOARTICULO') <> NIL then TcxButtonEditProperties(GetColumnByFieldName('CODIGOARTICULO').Properties).OnButtonClick := NIL; if GetColumnByFieldName('REFERENCIA') <> NIL then TcxButtonEditProperties(GetColumnByFieldName('REFERENCIA').Properties).OnButtonClick := NIL; end; cbxSituacion.Properties.OnChange := NIL; end; procedure TfrContratoCliente.CodCliSetText(Sender: TField; const Text: String); begin Sender.AsString := Text; CodigoCliente := Text; end; procedure TfrContratoCliente.actEliminarDetalleUpdate(Sender: TObject); begin if not (Modo in [Anadir, Modificar]) then (Sender as TAction).Enabled := False else (Sender as TAction).Enabled := not (TablaDetallesMem.RecordCount = 0); end; procedure TfrContratoCliente.actEliminarTodoDetalleUpdate(Sender: TObject); begin if not (Modo in [Anadir, Modificar]) then (Sender as TAction).Enabled := False else (Sender as TAction).Enabled := not (TablaDetallesMem.RecordCount = 0); end; procedure TfrContratoCliente.CargarPropiedadesArticulo( NumConcepto: Integer; DatosArticulo: TDatosArticulo); var FPropiedad : TDatosPropiedad; FBookmark : string; begin with TablaPropiedadesMem do begin FBookmark := Bookmark; DisableControls; try First; while not EOF do begin if FieldByName('NUMCONCEPTO').AsInteger = NumConcepto then begin FPropiedad := TDatosPropiedad.Create; FPropiedad.CodigoPropiedad := FieldByName('CODIGOPROPIEDAD').AsInteger; FPropiedad.Valor := FieldByName('VALOR').AsString; DatosArticulo.ListaPropiedades.Add(FPropiedad); end; Next; end; finally Bookmark := FBookmark; EnableControls; end; end; end; procedure TfrContratoCliente.cbXDocumentoPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin if VerMensajePreguntaFmt(msgCliCambiarTipoPre, [cbxDocumento.Text]) = mrYES then CargarDatosDocumento(TablaDocumentos.FieldByName('CODIGO').AsString) else begin ErrorText := ''; Error := True; cbxDocumento.Undo; // Restaurar el valor anterior end; end; procedure TfrContratoCliente.actEditarPropiedadesUpdate( Sender: TObject); begin if not (Modo in [Anadir, Modificar]) then (Sender as TAction).Enabled := False else (Sender as TAction).Enabled := not (TablaDetallesMem.RecordCount = 0); end; procedure TfrContratoCliente.actAnadirDetalleUpdate(Sender: TObject); begin if not (Modo in [Anadir, Modificar]) then (Sender as TAction).Enabled := False else (Sender as TAction).Enabled := True; end; function TfrContratoCliente.ArticuloConPropiedades( NumConcepto: Integer): Boolean; begin Result := False; with TablaPropiedadesMem do begin DisableControls; try First; while not EOF do begin if FieldByName('NUMCONCEPTO').AsInteger = NumConcepto then begin Result := True; Break; end; Next; end; finally EnableControls; end; end; end; procedure TfrContratoCliente.TablaDetallesNewRecord(DataSet: TDataSet); begin // end; procedure TfrContratoCliente.CargarDatosDocumento(CodigoDocumento : String); var DocAux : TDocumento; begin DocAux := TDocumento.Create(CodigoDocumento); Entidad := dmTablaDocumentos.DarEntidadDocumento(entContratoCliente, DocAux.Codigo); try Nota.EditingText := DocAux.Notas; TablaContratos.FieldByName('OBSERVACIONES').AsString := DocAux.Notas; FormasPago.EditingText := DocAux.FormaPago; TablaContratos.FieldByName('FORMAPAGO').AsString := DocAux.FormaPago; PlazosEntrega.EditingText := DocAux.PlazoEntrega; TablaContratos.FieldByName('PLAZOENTREGA').AsString := DocAux.PlazoEntrega; finally DocAux.Free; DocAux := NIL; end; end; procedure TfrContratoCliente.VALORGetProperties( Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; var AProperties: TcxCustomEditProperties); begin if not ARecord.Focused then Exit else begin with TablaValores do begin try DisableControls; Close; // ¿Tiene 'copia'? if TablaPropiedades.FieldByName('COPIA').AsVariant <> NULL then ParamByName('CODIGOPROPIEDAD').AsInteger := TablaPropiedades.FieldByName('COPIA').AsInteger else // No tiene 'copia' ParamByName('CODIGOPROPIEDAD').AsInteger := TablaPropiedadesMem.FieldByName('CODIGOPROPIEDAD').AsInteger; Prepare; Open; if RecordCount = 0 then AProperties := dmConfiguracion.cxEditRepository1TextItem1.Properties else begin AProperties := dmConfiguracion.cxEditRepository1LookupComboBoxItem1.Properties; with TcxLookupComboBoxProperties(AProperties) do begin DropDownListStyle := lsEditList; ImmediatePost := True; KeyFieldNames := 'DESCRIPCION'; ListColumns.Clear; ListColumns.Add.FieldName := 'DESCRIPCION'; ListOptions.AnsiSort := True; ListOptions.GridLines := glNone; ListOptions.ShowHeader := False; ListSource := dsValores; end; end; finally EnableControls; end; end; end; end; procedure TfrContratoCliente.ConfigurarPantallaDocumento; begin if (Entidad = entContratoCocina) then pagPlanos.TabVisible := True else pagPlanos.TabVisible := False; case Entidad of entContratoCocina, entContratoBano, entContratoArmarios : begin pagPrecios.TabVisible := True; gridDetallesLevel1.GridView := VistaPropiedades; pnlObservaciones.Visible := True; if Modo in [Anadir, Modificar] then begin pnlBarraContenido.Visible := False; pnlBarraPropiedades.Visible := True; pnlBarraPrecio.Visible := True; Observaciones.Properties.ReadOnly := False; end else begin pnlBarraContenido.Visible := False; pnlBarraPropiedades.Visible := True; pnlBarraPrecio.Visible := False; Observaciones.Properties.ReadOnly := True; end; if Entidad = entContratoArmarios then begin eSeccion.Visible := True; Seccion.Visible := True; Seccion.ItemIndex := 0; end else begin eSeccion.Visible := False; Seccion.Visible := False; end end else begin pagPrecios.TabVisible := False; gridDetallesLevel1.GridView := VistaDetalles; pnlObservaciones.Visible := False; if Modo in [Anadir, Modificar] then begin pnlBarraContenido.Visible := True; pnlBarraPropiedades.Visible := False; pnlBarraPrecio.Visible := False; end else begin pnlBarraContenido.Visible := False; pnlBarraPropiedades.Visible := False; pnlBarraPrecio.Visible := False; end end end; end; procedure TfrContratoCliente.InsertarDetallesDefecto; begin case Entidad of entContratoCocina, entContratoBano : begin with TablaDetallesMem do begin Append; FieldByName('NUMCONCEPTO').AsInteger := 0; FieldByName('TIPOCONCEPTO').AsString := dmTablaDocumentos.DarCodigoDocumento(Entidad); FieldByName('CANTIDAD').AsInteger := 1; Post; InsertarPropiedades(FieldByName('NUMCONCEPTO').AsInteger); CargarPreciosDocumento(cbxDocumento.DataBinding.Field.AsString, 1); First; end; end; entContratoArmarios: begin with TablaDetallesMem do begin Append; FieldByName('NUMCONCEPTO').AsInteger := 0; FieldByName('TIPOCONCEPTO').AsString := 'FRENTE'; FieldByName('CANTIDAD').AsInteger := 1; Post; InsertarPropiedades(FieldByName('NUMCONCEPTO').AsInteger, FieldByName('TIPOCONCEPTO').AsString); Append; FieldByName('NUMCONCEPTO').AsInteger := 1; FieldByName('TIPOCONCEPTO').AsString := 'INTERIOR'; FieldByName('CANTIDAD').AsInteger := 1; Post; InsertarPropiedades(FieldByName('NUMCONCEPTO').AsInteger, FieldByName('TIPOCONCEPTO').AsString); CargarPreciosDocumento(cbxDocumento.DataBinding.Field.AsString, 2); First; end; end; end; end; procedure TfrContratoCliente.CargarPreciosDocumento( CodigoDocumento: String; NumConcepto: Integer); var DocAux : TDocumento; Contador : Integer; begin DocAux := TDocumento.Create(CodigoDocumento); try with TablaDetallesMem do begin if State in dsEditModes then Cancel; for Contador := 0 to DocAux.ListaPrecios.Count-1 do begin Append; FieldByName('NUMCONCEPTO').AsInteger := NumConcepto + Contador; FieldByName('TIPOCONCEPTO').AsString := 'PRECIO'; FieldByName('DESCRIPCION').AsString := DocAux.ListaPrecios.Strings[Contador]; FieldByName('CANTIDAD').AsInteger := 1; Post; end; end; finally DocAux.Free; DocAux := NIL; end; end; procedure TfrContratoCliente.TablaMemDetallesFilterRecord(DataSet: TDataSet; var Accept: Boolean); begin Accept := (DataSet.FieldByName('TIPOCONCEPTO').AsString = 'PRECIO'); end; procedure TfrContratoCliente.actAnadirPropiedadExecute(Sender: TObject); begin with TablaPropiedadesMem do begin Next; if EOF then Append else begin Prior; Insert; end; gridDetalles.SetFocus; end; end; procedure TfrContratoCliente.actAnadirPropiedadUpdate(Sender: TObject); begin (Sender as TAction).Enabled := (Modo in [Anadir, Modificar]); end; procedure TfrContratoCliente.actEliminarPropiedadExecute( Sender: TObject); begin if TablaPropiedadesMem.RecordCount = 0 then begin { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } TablaPropiedadesMem.Cancel; Exit; end; if (VerMensajePregunta(msgDatosBorrarPropiedad) <> IDYES) then Exit; TablaPropiedadesMem.Delete; end; procedure TfrContratoCliente.actEliminarPropiedadUpdate( Sender: TObject); begin (Sender as TAction).Enabled := (Modo in [Anadir, Modificar]); end; procedure TfrContratoCliente.AsignarNumPropiedad; var FDetallesBookmark : string; Contador : Integer; begin with TablaPropiedadesMem do begin DisableControls; FDetallesBookmark := Bookmark; try Contador := 0; First; while not EOF do begin Edit; FieldByName('NUMPROPIEDAD').AsInteger := Contador; Post; Contador := Contador + 1; Next; end; finally //FUltimaPropiedad := Contador - 1; EnableControls; Bookmark := FDetallesBookmark; end; end; end; procedure TfrContratoCliente.PropiedadesAfterDelete(DataSet: TDataSet); begin AsignarNumPropiedad; end; procedure TfrContratoCliente.actSubirExecute(Sender: TObject); var NumPropiedad : Integer; begin NumPropiedad := TablaPropiedadesMem.FieldByName('NUMPROPIEDAD').AsInteger; IntercambiarPropiedades(@TablaPropiedadesMem, NumPropiedad, NumPropiedad - 1); VistaPropiedades.DataController.RefreshExternalData; end; procedure TfrContratoCliente.actSubirUpdate(Sender: TObject); begin with TablaPropiedadesMem do (Sender as TAction).Enabled := (Modo in [Anadir, Modificar]) and (FieldByName('NUMPROPIEDAD').AsInteger > 0); end; procedure TfrContratoCliente.actBajarExecute(Sender: TObject); var NumPropiedad : Integer; begin NumPropiedad := TablaPropiedadesMem.FieldByName('NUMPROPIEDAD').AsInteger; IntercambiarPropiedades(@TablaPropiedadesMem, NumPropiedad, NumPropiedad + 1); VistaPropiedades.DataController.RefreshExternalData; end; procedure TfrContratoCliente.actBajarUpdate(Sender: TObject); begin with TablaPropiedadesMem do (Sender as TAction).Enabled := (Modo in [Anadir, Modificar]) and (FieldByName('NUMPROPIEDAD').AsInteger < (VistaPropiedades.ViewData.CardCount - 1)); end; procedure TfrContratoCliente.gridDetallesResize(Sender: TObject); begin if gridDetalles.ActiveView = VistaPropiedades then VistaPropiedades.OptionsView.CardWidth := (gridDetalles.Width - 40) div 2; end; procedure TfrContratoCliente.pnlPreciosResize(Sender: TObject); begin with gridPrecios do begin RowCount := pnlGrid.Height div 18; end; end; procedure TfrContratoCliente.TablaMemPropiedadesFilterRecord( DataSet: TDataSet; var Accept: Boolean); begin Accept := (DataSet.FieldByName('NUMCONCEPTO').AsInteger = Seccion.ItemIndex); end; procedure TfrContratoCliente.SeccionPropertiesChange(Sender: TObject); begin if TablaPropiedadesMem.Active then TablaPropiedadesMem.First; Observaciones.Lines.Clear; case Seccion.ItemIndex of 0 : Observaciones.Lines.Text := FObservaciones1; 1 : Observaciones.Lines.Text := FObservaciones2; end; end; procedure TfrContratoCliente.ObservacionesExit(Sender: TObject); begin case Seccion.ItemIndex of 0 : FObservaciones1 := Observaciones.Lines.Text; 1 : FObservaciones2 := Observaciones.Lines.Text; else FObservaciones1 := Observaciones.Lines.Text; end; end; procedure TfrContratoCliente.VistaPropiedadesDBCardViewRow3CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); begin if Length(AViewInfo.DisplayValue) > 32 then ACanvas.Font.Color := clRed; end; procedure TfrContratoCliente.pagNotasVariasResize(Sender: TObject); var Aux : Integer; begin Aux := pagNotasVarias.Height div 3; pnlFormasPago.Height := Aux; pnlPlazosEntrega.Height := Aux; pnlNota.Height := Aux; end; procedure TfrContratoCliente.actAnadirPlanoExecute(Sender: TObject); var FicheroOrigen : String; i : Integer; begin OpenDialog1.Filter := tvPlanos.Filter; try if OpenDialog1.Execute then begin for i:=0 to OpenDialog1.Files.Count - 1 do begin FicheroOrigen := OpenDialog1.Files.Strings[i]; if not esCadenaVacia(FicheroOrigen) then begin if not AnadirPlano(FicheroOrigen) then VerMensaje(msgCliPreErrAnadirDoc); end; end; end; finally OpenDialog1.Filter := ''; end; end; procedure TfrContratoCliente.actEliminarPlanoExecute(Sender: TObject); var cadena : String; i : Integer; begin cadena := '¿Desea borrar este plano?'; if (VerMensajePregunta(cadena) <> IDYES) then Exit; if not SysUtils.DeleteFile(tvPlanos.SelectedFile) then VerMensaje(msgCliPreErrEliminarDoc); tvPlanos.Delete(tvPlanos.Selected); end; procedure TfrContratoCliente.actEliminarPlanoUpdate(Sender: TObject); begin (Sender as TAction).Enabled := (Modo in [Anadir, Modificar]) and (Length(tvPlanos.SelectedFile) > 0); end; procedure TfrContratoCliente.actRefrescarPlanoExecute(Sender: TObject); begin tvPlanos.Refresh; end; function TfrContratoCliente.AnadirPlano(RutaPlano: String): Boolean; var DireccionDestino: String; begin try Result := False; DireccionDestino := darRutaPlanosContrato + PathDelim + ExtractFileName(RutaPlano); CopiarFichero(RutaPlano, DireccionDestino); tvPlanos.AddFromFile(DireccionDestino); Result := True; finally end; end; function TfrContratoCliente.darRutaPlanosContrato: Variant; begin if (Modo = Anadir) then begin if (Length(FDirectorio) = 0) then FDirectorio := '\' + ExtractFileName(darFicheroTemporal) end else FDirectorio := dmTablaContratos.DarRutaPlanos(CodigoContrato); Result := FRootPlanos + FDirectorio; end; procedure TfrContratoCliente.ComprobarEstadoDirPlanos; var RutaTemp, RutaFinal: String; begin if Entidad = entContratoCocina then begin DeshabilitarPlanos; Application.ProcessMessages; if Modo = Anadir then begin //Intentamos renombrar el directorio temporal por el real (si existiera) RutaTemp := darRutaPlanosContrato; FDirectorio := PathDelim + StringReplace(CodigoContrato,'/','',[rfReplaceAll]); RutaFinal:= darRutaPlanosContrato; RenameFile(RutaTemp, RutaFinal); end; { Intentamos borrar el directorio de los documentos. Si está vacio se borrar y si no se queda } RemoveDir(darRutaPlanosContrato); Application.ProcessMessages; end; end; function TfrContratoCliente.CrearDirPlanos: Boolean; var DireccionDestino: String; begin Result := False; DeshabilitarPlanos; DireccionDestino := darRutaPlanosContrato; if not DirectoryExists(DireccionDestino) then CreateDir(DireccionDestino); HabilitarPlanos; Result := True; end; procedure TfrContratoCliente.DeshabilitarPlanos; begin // end; function TfrContratoCliente.EliminarDirPlanos: Boolean; begin Result := False; DeshabilitarPlanos; Application.ProcessMessages; if DirectoryExists(darRutaPlanosContrato) then begin SysFunc.Deltree(darRutaPlanosContrato, True); Application.ProcessMessages; Result := DirectoryExists(darRutaPlanosContrato); end; end; procedure TfrContratoCliente.HabilitarPlanos; begin tvPlanos.Directory := darRutaPlanosContrato; end; procedure TfrContratoCliente.actAnadirPlanoUpdate(Sender: TObject); begin (Sender as TAction).Enabled := (Modo in [Anadir, Modificar]); end; procedure TfrContratoCliente.tvPlanosDblClick(Sender: TObject); begin if ShellExecute(Handle, nil, pchar(tvPlanos.SelectedFile), nil, nil, SW_SHOWNORMAL) <= 32 then Application.MessageBox('No se pudo visualizar el fichero', 'Error', MB_ICONEXCLAMATION); end; procedure TfrContratoCliente.JvTrackBar1Change(Sender: TObject); begin tvPlanos.Size := JvTrackBar1.Position; end; procedure TfrContratoCliente.ReferenciaArticuloDetalleSetText( Sender: TField; const Text: String); var ReferenciaAux : String; CodigoArtAux : String; begin Sender.AsString := Text; ReferenciaAux := Text; if (dmTablaArticulos.DarCodigoArt(ReferenciaAux, CodigoArtAux)) then CodigoArticulo := CodigoArtAux else begin raise Exception.CreateFmt(msgDatosRefArtNoExiste, [ReferenciaAux]); end; end; procedure TfrContratoCliente.GridBotonReferenciaArticuloClick( Sender: TObject; AButtonIndex: Integer); begin TablaDetallesMem.Edit; ContenidoModal := TfrArticulos.Create(Self); gridDetalles.SetFocus; end; end.