git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES/trunk@4 b68bf8ae-e977-074f-a058-3cfd71dd8f45
1942 lines
60 KiB
ObjectPascal
1942 lines
60 KiB
ObjectPascal
{
|
|
===============================================================================
|
|
Copyright (©) 2001. 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: 01-10-2001
|
|
Versión actual: 1.2.5
|
|
Fecha versión actual: 05-09-2005
|
|
===============================================================================
|
|
Modificaciones:
|
|
|
|
Fecha Comentarios
|
|
---------------------------------------------------------------------------
|
|
16-10-2001 Se ha utilizado una tabla de memoria para tratar la lista
|
|
de detalles del presupuesto.
|
|
|
|
17-10-2001 Cuando se inserta un concepto se inserta por debajo del con-
|
|
cepto actual. Con la tecla 'Insert' se inserta por encima.
|
|
|
|
17-10-2001 Se ha añadido 'cliente final'.
|
|
|
|
21-10-2001 En el modo Consultar/Eliminar se quedaban activados algunos
|
|
botones con lupa.
|
|
|
|
27-10-2001 Se ha arreglado un fallo que al añadir un concepto estando
|
|
en la última fila lo hacia por encima del registro, no por
|
|
debajo.
|
|
|
|
29-10-2001 Cuando se elimina un concepto con <CTRL+Supr> hay que
|
|
volver a recalcular el importe total del presupuesto.
|
|
|
|
30-10-2001 El tamaño de la letra de los campos 'Portada' y 'Memoria' se
|
|
ha ampliado a 10 puntos.
|
|
|
|
27-11-2001 Se recupera la columna 'Unid. medida' del artículo.
|
|
|
|
15-01-2002 Se añaden 'capitulos opcionales'.
|
|
|
|
07-02-2002 Desactivada la opción de 'CancelOnExit' del grid.
|
|
|
|
24-02-2002 Cuando se recupera los datos de un artículo, si las columnas
|
|
Cantidad, Precio, Unid. medida, Total ya están rellenas en
|
|
el grid, no se pisa con los valores del material.
|
|
|
|
24-02-2002 En la ventana modal de artículos seleccionar, si es posible,
|
|
la fila con el último material seleccionado.
|
|
|
|
02-03-2002 En el contenido se pueden añadir muchos materiales a la vez.
|
|
|
|
07-04-2002 Se ha adaptado para la transacción única.
|
|
|
|
09-04-2002 En las funciones 'CancelarAnadir', 'CancelarModificar',
|
|
'CancelarEliminar', 'AnadirDatos', 'ModificarDatos', y
|
|
'EliminarDatos' cerrar todas las tablas que se usen.
|
|
|
|
09-04-2002 En el evento 'bCancelarClick' llamar a la función
|
|
'TratarCambios' en vez de 'DescartarOperacion'.
|
|
|
|
05-05-2002 En el procedimiento 'SetCodigoArticulo' no se daba un mensaje
|
|
de error cuando el artículo no existía.
|
|
|
|
11-05-2002 P215. Copia de presupuestos.
|
|
|
|
21-08-2002 P237. Revisar los botones de 'Eliminar' y 'Eliminar todo'
|
|
para que al pulsar 'Esc' cancele la operación y no la
|
|
ejecute como ahora.
|
|
|
|
21-08-2002 P238. Revisar el grid de los detalles para que se pueda
|
|
borrar un código de artículo cuando ya se ha introducido.
|
|
|
|
14-09-2002 P242. Sacar una ventana modal para editar el
|
|
texto de un concepto.
|
|
|
|
24-09-2002 Se producía una excepción si el cursor estaba en el código
|
|
del presupuesto, se pulsaba la tecla 'Esc' y se elegía 'No'.
|
|
El frame estaba oculto pero saltaba el evento OnExit del
|
|
campo de código de factura.
|
|
|
|
04-12-2002 Se producía una excepción al recalcular el total del presu-
|
|
puesto cuando había muchos conceptos.
|
|
|
|
21-12-2002 Se ha eliminado un error con el campo 'PROVINCIA'. Al estar
|
|
situado en ese campo y dar Esc para salir se puede producir
|
|
una excepción.
|
|
|
|
08-03-2003 Se han puesto componentes con calendario.
|
|
|
|
08-03-2004 p272. Adaptación a multiempresa.
|
|
|
|
19-07-2004 p278. Error al copiar un presupuesto. No estaba bien adaptado
|
|
a multiempresa.
|
|
|
|
18-03-2005 p587. Adaptación a Bonificaciones
|
|
|
|
05-09-2005 Cambio de dxGrid a cxGrid.
|
|
===============================================================================
|
|
}
|
|
|
|
unit PresupuestoCliente;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, RdxBarras, RdxBotones, StdCtrls, RdxComboBox, RdxCampos,
|
|
RdxMemo, RdxTitulos, Controls, ExtCtrls, RdxPaneles, Forms, Classes,
|
|
RdxFramePresupuestos, ComCtrls, RdxPageControl, Grids, DBGrids, RXDBCtrl,
|
|
Db, RdxRichEdit, Graphics, RxMemDS,IBCustomDataSet, Configuracion, dxCntner,
|
|
dxEditor, dxExEdtr, dxEdLib, dxDBELib, dxTL, dxDBCtrl, dxDBGrid,
|
|
Colores, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit,
|
|
cxDropDownEdit, cxCalendar, cxDBEdit, cxButtonEdit, cxCheckBox,
|
|
cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
|
|
cxClasses, cxGridCustomView, cxGrid, cxGraphics;
|
|
|
|
type
|
|
TfrPresupuestoCliente = class(TRdxFramePresupuestos)
|
|
pnlScroll: TRdxScrollPanel;
|
|
brSalir: TRdxBarraInferior;
|
|
bSalir: TRdxBoton;
|
|
brGuardar: TRdxBarraInferior;
|
|
bGuardar: TRdxBoton;
|
|
bCancelar: TRdxBoton;
|
|
pnlPresupuesto: TRdxPanel;
|
|
eFechaEmision: TLabel;
|
|
eEstadoPresupuesto: TLabel;
|
|
eRealizadoPor: TLabel;
|
|
eCodPedido: TLabel;
|
|
eFechaAlta: TLabel;
|
|
eCodigo: TLabel;
|
|
cPresupuesto: TRdxCabecera;
|
|
Situacion: TRdxDBComboBox;
|
|
Usuario: TRdxDBEdit;
|
|
CodigoPedido: TRdxDBEdit;
|
|
pnlPaginas: TRdxPanel;
|
|
Paginas: TRdxPagesControl;
|
|
pagCliente: TTabSheet;
|
|
pagContenido: TTabSheet;
|
|
pagPortada: TTabSheet;
|
|
pnlCliente: TRdxPanel;
|
|
eCodigoCliente: TLabel;
|
|
eNIFCIF: TLabel;
|
|
eNombre: TLabel;
|
|
eDireccion: TLabel;
|
|
eNumero: TLabel;
|
|
ePiso: TLabel;
|
|
ePoblacion: TLabel;
|
|
eCodigoPostal: TLabel;
|
|
eProvincia: TLabel;
|
|
ePersona: TLabel;
|
|
eTelefono1: TLabel;
|
|
eFax: TLabel;
|
|
NIF: TRdxDBEdit;
|
|
Nombre: TRdxDBEdit;
|
|
Calle: TRdxDBEdit;
|
|
Numero: TRdxDBEdit;
|
|
Piso: TRdxDBEdit;
|
|
Poblacion: TRdxDBEdit;
|
|
CodigoPostal: TRdxDBEdit;
|
|
Provincia: TRdxDBEdit;
|
|
PersonaContacto: TRdxDBEdit;
|
|
Telefono: TRdxDBEdit;
|
|
Fax: TRdxDBEdit;
|
|
ImporteTotal: TRdxDBEdit;
|
|
eImporteEuros: TLabel;
|
|
pnlGridArticulos: TPanel;
|
|
pnlBarraGrid: TRdxPanel;
|
|
bAnadirCon: TRdxBoton;
|
|
bEliminar: TRdxBoton;
|
|
bEliminarTodo: TRdxBoton;
|
|
dsPresupuesto: TDataSource;
|
|
dsDetallesPresupuesto: TDataSource;
|
|
pagDescripcion: TTabSheet;
|
|
RdxPanel2: TRdxPanel;
|
|
Label1: TLabel;
|
|
Image1: TImage;
|
|
RdxPanel3: TRdxPanel;
|
|
RdxPanel4: TRdxPanel;
|
|
Label2: TLabel;
|
|
Image2: TImage;
|
|
RdxPanel5: TRdxPanel;
|
|
bAnadirCap: TRdxBoton;
|
|
pagNotas: TTabSheet;
|
|
RdxPanel6: TRdxPanel;
|
|
Label3: TLabel;
|
|
RdxPanel7: TRdxPanel;
|
|
RdxPanel1: TRdxPanel;
|
|
RdxCabecera1: TRdxCabecera;
|
|
Label4: TLabel;
|
|
Label5: TLabel;
|
|
NombreClienteFinal: TRdxDBEdit;
|
|
Notas: TRdxDBRichEdit;
|
|
Memoria: TRdxDBRichEdit;
|
|
Portada: TRdxDBRichEdit;
|
|
bAnadirOp: TRdxBoton;
|
|
pnlTitulo: TRdxPanelTituloOperacion;
|
|
FechaAlta: TcxDBDateEdit;
|
|
FechaDecision: TcxDBDateEdit;
|
|
Codigo: TcxDBButtonEdit;
|
|
CodCliente: TcxDBButtonEdit;
|
|
CodClienteFinal: TcxDBButtonEdit;
|
|
RdxPanel8: TRdxPanel;
|
|
Label6: TLabel;
|
|
DesBonificacion: TRdxDBEdit;
|
|
Label7: TLabel;
|
|
cxBonificacion: TcxCheckBox;
|
|
ImpBonificacion: TRdxDBEdit;
|
|
gridDetalles: TcxGrid;
|
|
gridDetallesView: TcxGridDBTableView;
|
|
gridDetallesLevel1: TcxGridLevel;
|
|
procedure bSalirClick(Sender: TObject);
|
|
procedure bGuardarClick(Sender: TObject);
|
|
procedure bCancelarClick(Sender: TObject);
|
|
procedure ProvinciaButtonClick(Sender: TObject);
|
|
procedure PoblacionButtonClick(Sender: TObject);
|
|
procedure bAnadirConClick(Sender: TObject);
|
|
procedure bEliminarClick(Sender: TObject);
|
|
procedure bEliminarTodoClick(Sender: TObject);
|
|
procedure bAnadirCapClick(Sender: TObject);
|
|
procedure bAnadirOpClick(Sender: TObject);
|
|
procedure gridDetalles2Editing(Sender: TObject; Node: TdxTreeListNode;
|
|
var Allow: Boolean);
|
|
procedure gridDetalles2CustomDrawCell(Sender: TObject; ACanvas: TCanvas;
|
|
ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn;
|
|
ASelected, AFocused, ANewItemRow: Boolean; var AText: String;
|
|
var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;
|
|
var ADone: Boolean);
|
|
procedure RdxFramePresupuestosShow(Sender: TObject);
|
|
procedure CodigoPropertiesButtonClick(Sender: TObject;
|
|
AButtonIndex: Integer);
|
|
procedure CodigoPropertiesValidate(Sender: TObject;
|
|
var DisplayValue: Variant; var ErrorText: TCaption;
|
|
var Error: Boolean);
|
|
procedure CodClientePropertiesButtonClick(Sender: TObject;
|
|
AButtonIndex: Integer);
|
|
procedure CodClientePropertiesValidate(Sender: TObject;
|
|
var DisplayValue: Variant; var ErrorText: TCaption;
|
|
var Error: Boolean);
|
|
procedure CodClienteFinalPropertiesButtonClick(Sender: TObject;
|
|
AButtonIndex: Integer);
|
|
procedure CodClienteFinalPropertiesValidate(Sender: TObject;
|
|
var DisplayValue: Variant; var ErrorText: TCaption;
|
|
var Error: Boolean);
|
|
procedure cxBonificacionPropertiesChange(Sender: TObject);
|
|
procedure gridDetallesViewEditing(Sender: TcxCustomGridTableView;
|
|
AItem: TcxCustomGridTableItem; var AAllow: Boolean);
|
|
procedure gridDetallesViewCustomDrawCell(
|
|
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
|
|
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
|
|
procedure GridBotonCodigoArticuloClick(Sender: TObject; AButtonIndex: Integer);
|
|
private
|
|
FCodigoProvincia : Variant;
|
|
FCodigoPoblacion : Variant;
|
|
FCodigoCliente : Variant;
|
|
FCodigoClienteFinal : Variant;
|
|
FCodigoArticulo : Variant;
|
|
FCodigoClienteAux : Variant;
|
|
FTablaDetallesMem : TRxMemoryData;
|
|
procedure CalcularTotalDetalle;
|
|
procedure CalcularTotalPresupuesto;
|
|
procedure ActivarEventosCampos;
|
|
procedure BorrarDetalles;
|
|
procedure BorrarDetallesIB;
|
|
procedure SalvarDetalles;
|
|
procedure CargarDetalles;
|
|
procedure DetalleAfterDelete (DataSet: TDataSet);
|
|
procedure DetalleAfterInsert (DataSet: TDataSet);
|
|
procedure CopiarDatosPresupuesto;
|
|
procedure CopiarConceptosPresupuesto;
|
|
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 SetCodigoProvincia (Value : Variant); virtual;
|
|
procedure SetCodigoPoblacion (Value : Variant); virtual;
|
|
procedure SetCodigoCliente (Value : Variant);
|
|
procedure SetCodigoClienteFinal (Value : Variant);
|
|
procedure SetCodigoArticulo (Value : Variant);
|
|
procedure FreeContenido; override;
|
|
procedure BuscarPresupuesto; override;
|
|
public
|
|
property CodigoProvincia : Variant read FCodigoProvincia write SetCodigoProvincia;
|
|
property CodigoPoblacion : Variant read FCodigoPoblacion write SetCodigoPoblacion;
|
|
property CodigoCliente : Variant read FCodigoCliente write SetCodigoCliente;
|
|
property CodigoClienteFinal : Variant read FCodigoClienteFinal write SetCodigoClienteFinal;
|
|
property CodigoArticulo : Variant read FCodigoArticulo write SetCodigoArticulo;
|
|
constructor Create (AOwner : TComponent); override;
|
|
destructor Destroy; override;
|
|
published
|
|
property TablaPresupuestos;
|
|
property TablaDetallesPresupuestos;
|
|
property TablaDetallesMem : TRxMemoryData read FTablaDetallesMem write FTablaDetallesMem;
|
|
property CodigoPresupuesto;
|
|
property CodigoPresupuestoOrigen;
|
|
procedure ProvinciaSetText(Sender: TField; const Text: String);
|
|
procedure GridBotonDescripcionClick(Sender: TObject);
|
|
procedure CodigoArticuloDetalleSetText(Sender: TField; const Text: String);
|
|
procedure PlusDetalleSetText(Sender: TField; const Text: String);
|
|
procedure CantidadDetalleSetText(Sender: TField; const Text: String);
|
|
procedure PrecioDetalleSetText(Sender: TField; const Text: String);
|
|
procedure PrecioMinutoDetalleSetText(Sender: TField; const Text: String);
|
|
procedure MinutosDetalleSetText(Sender: TField; const Text: String);
|
|
procedure ImpBonificacionSetText(Sender: TField; const Text: String);
|
|
end;
|
|
|
|
var
|
|
frPresupuestoCliente: TfrPresupuestoCliente;
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
|
|
uses
|
|
PresupuestosClientes, BaseDatos, TablaPresupuestos, IBDatabase,
|
|
Mensajes, Clientes, RdxFrameProvincias, RdxFramePoblaciones,
|
|
TablaProvincias, Provincias, Poblaciones, TablaClientes, RdxFrameClientes,
|
|
IB, Articulos, RdxFrameArticulos, TablaArticulos, RdxEmpresaActiva,
|
|
Tipos, StrFunc, Sysutils, TablaPoblaciones, Excepciones, NumFunc,
|
|
IBErrorCodes, dxDBTLCL, IBSQL, EditorDescripcion, Literales,
|
|
TablaAlmacenes, Constantes, cxGridDBDataDefinitions;
|
|
|
|
var
|
|
NuevoConcepto : Integer;
|
|
|
|
{ TfrPresupuestoCliente }
|
|
|
|
procedure TfrPresupuestoCliente.ActivarModoAnadir;
|
|
var
|
|
CodNuevo : Variant;
|
|
begin
|
|
dsPresupuesto.AutoEdit := True;
|
|
dsDetallesPresupuesto.AutoEdit := True;
|
|
Codigo.Properties.Buttons[0].Visible := False;
|
|
Codigo.Properties.ReadOnly := False;
|
|
Codigo.Properties.OnValidate := CodigoPropertiesValidate;
|
|
CodCliente.Properties.Buttons[0].Visible := True;
|
|
CodCliente.Properties.OnValidate := CodClientePropertiesValidate;
|
|
CodClienteFinal.Properties.Buttons[0].Visible := True;
|
|
CodClienteFinal.Properties.OnValidate := CodClienteFinalPropertiesValidate;
|
|
Poblacion.VerBoton := True;
|
|
Provincia.VerBoton := True;
|
|
cxBonificacion.Properties.ReadOnly := False;
|
|
ActivarEdicionGridDetalles(gridDetallesView);
|
|
|
|
|
|
(gridDetallesView.GetColumnByFieldName('CODIGOARTICULO').Properties as TcxButtonEditProperties).OnButtonClick := GridBotonCodigoArticuloClick;
|
|
|
|
{ (gridDetalles.ColumnByFieldName('DESCRIPCION')
|
|
as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonDescripcionClick;}
|
|
|
|
pnlBarraGrid.Visible := True;
|
|
|
|
try
|
|
{ Inicializar la tabla de presupuestos }
|
|
TablaPresupuestos.DisableControls;
|
|
TablaPresupuestos.Close;
|
|
CodNuevo := dmTablaPresupuestos.darNuevoCodigo;
|
|
with TablaPresupuestos do
|
|
begin
|
|
CachedUpdates := True;
|
|
Prepare;
|
|
Open;
|
|
EnableControls;
|
|
Insert;
|
|
FieldByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
FieldByName('PROVINCIA').OnSetText := ProvinciaSetText;
|
|
end;
|
|
|
|
Codigo.DataBinding.Field.asString := CodNuevo;
|
|
FechaAlta.DataBinding.Field.AsString := DateToStr(Date);
|
|
Situacion.Field.AsString := Situacion.Items.Strings[0];
|
|
Usuario.Field.AsString := dmBaseDatos.Usuario;
|
|
Notas.Field.AsString := msgPreNotaPorDefecto;
|
|
|
|
{ Inicializar la tabla de detalles }
|
|
with TablaDetallesPresupuestos do
|
|
begin
|
|
Close;
|
|
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
Params.ByName('CODIGOPRESUPUESTO').AsString := CodNuevo;
|
|
Prepare;
|
|
Open;
|
|
end;
|
|
|
|
with TablaDetallesMem do
|
|
begin
|
|
Close;
|
|
Open;
|
|
ActivarEventosCampos;
|
|
end;
|
|
|
|
dmTablaPresupuestos.InicializarTablaPresupuestos(@TablaPresupuestos);
|
|
dmTablaPresupuestos.InicializarTablaDetalles(@TablaDetallesMem);
|
|
|
|
if not EsCadenaVacia(CodigoPresupuestoOrigen) then
|
|
CopiarDatosPresupuesto;
|
|
|
|
Visible := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.ActivarModoConsultar;
|
|
begin
|
|
dsPresupuesto.AutoEdit := False;
|
|
dsDetallesPresupuesto.AutoEdit := False;
|
|
Codigo.Properties.Buttons[0].Visible := True;
|
|
Codigo.Properties.OnValidate := nil;
|
|
CodCliente.Properties.Buttons[0].Visible := False;
|
|
CodCliente.Properties.OnValidate := nil;
|
|
CodClienteFinal.Properties.Buttons[0].Visible := False;
|
|
CodClienteFinal.Properties.OnValidate := nil;
|
|
Poblacion.VerBoton := False;
|
|
Provincia.VerBoton := False;
|
|
|
|
DesactivarEdicionGridDetalles(gridDetallesView);
|
|
|
|
(gridDetallesView.GetColumnByFieldName('CODIGOARTICULO').Properties as TcxButtonEditProperties).OnButtonClick := NIL;
|
|
|
|
{ (gridDetalles.ColumnByFieldName('DESCRIPCION')
|
|
as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL;}
|
|
|
|
pnlBarraGrid.Visible := False;
|
|
try
|
|
TablaPresupuestos.Prepare;
|
|
TablaPresupuestos.Open;
|
|
|
|
if TablaPresupuestos.RecordCount = 0 then
|
|
begin
|
|
VerMensajeFmt(msgPreNoExistePre, [CodigoPresupuesto]);
|
|
CloseFrame;
|
|
Exit;
|
|
end;
|
|
|
|
TablaPresupuestos.Cancel;
|
|
|
|
with TablaDetallesPresupuestos do
|
|
begin
|
|
Close;
|
|
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
Params.ByName('CODIGOPRESUPUESTO').AsString := CodigoPresupuesto;
|
|
Prepare;
|
|
Open;
|
|
Cancel;
|
|
end;
|
|
|
|
with TablaDetallesMem do
|
|
begin
|
|
Close;
|
|
Open;
|
|
Cancel;
|
|
CargarDetalles;
|
|
end;
|
|
|
|
dmTablaPresupuestos.InicializarTablaPresupuestos(@TablaPresupuestos);
|
|
dmTablaPresupuestos.InicializarTablaDetalles(@TablaDetallesMem);
|
|
|
|
//Establecemos si hay o no bonificación
|
|
if not VarIsNull(TablaPresupuestos.FieldByName('DESBONIFICACION').AsVariant) then
|
|
cxBonificacion.Checked := True;
|
|
cxBonificacion.Properties.ReadOnly := True;
|
|
|
|
Visible := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.ActivarModoEliminar;
|
|
begin
|
|
dsPresupuesto.AutoEdit := False;
|
|
dsDetallesPresupuesto.AutoEdit := False;
|
|
Codigo.Properties.Buttons[0].Visible := True;
|
|
Codigo.Properties.OnValidate := nil;
|
|
CodCliente.Properties.Buttons[0].Visible := False;
|
|
CodCliente.Properties.OnValidate := nil;
|
|
CodClienteFinal.Properties.Buttons[0].Visible := False;
|
|
CodClienteFinal.Properties.OnValidate := nil;
|
|
Poblacion.VerBoton := False;
|
|
Provincia.VerBoton := False;
|
|
|
|
DesactivarEdicionGridDetalles(gridDetallesView);
|
|
|
|
(gridDetallesView.GetColumnByFieldName('CODIGOARTICULO').Properties as TcxButtonEditProperties).OnButtonClick := NIL;
|
|
|
|
{ // Para poder consultar el texto del concepto:
|
|
(gridDetalles.ColumnByFieldName('DESCRIPCION')
|
|
as TdxDBTreeListButtonColumn).OnEditButtonClick := NIL;}
|
|
|
|
pnlBarraGrid.Visible := False;
|
|
try
|
|
TablaPresupuestos.Prepare;
|
|
TablaPresupuestos.Open;
|
|
|
|
if TablaPresupuestos.RecordCount = 0 then
|
|
begin
|
|
VerMensajeFmt(msgPreNoExistePre, [CodigoPresupuesto]);
|
|
CancelarEliminar;
|
|
CloseFrame;
|
|
Exit;
|
|
end;
|
|
|
|
TablaPresupuestos.Cancel;
|
|
|
|
with TablaDetallesPresupuestos do
|
|
begin
|
|
Close;
|
|
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
Params.ByName('CODIGOPRESUPUESTO').AsString := CodigoPresupuesto;
|
|
Prepare;
|
|
Open;
|
|
Cancel;
|
|
end;
|
|
|
|
with TablaDetallesMem do
|
|
begin
|
|
Close;
|
|
Open;
|
|
Cancel;
|
|
CargarDetalles;
|
|
end;
|
|
|
|
dmTablaPresupuestos.InicializarTablaPresupuestos(@TablaPresupuestos);
|
|
dmTablaPresupuestos.InicializarTablaDetalles(@TablaDetallesMem);
|
|
|
|
//Establecemos si hay o no bonificación
|
|
if not VarIsNull(TablaPresupuestos.FieldByName('DESBONIFICACION').AsVariant) then
|
|
cxBonificacion.Checked := True;
|
|
cxBonificacion.Properties.ReadOnly := True;
|
|
|
|
Visible := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.ActivarModoModificar;
|
|
begin
|
|
dsPresupuesto.AutoEdit := True;
|
|
dsDetallesPresupuesto.AutoEdit := True;
|
|
Codigo.Properties.Buttons[0].Visible := True;
|
|
Codigo.Properties.ReadOnly := True;
|
|
Codigo.Properties.OnValidate := nil;
|
|
CodCliente.Properties.Buttons[0].Visible := True;
|
|
CodCliente.Properties.OnValidate := CodClientePropertiesValidate;
|
|
CodClienteFinal.Properties.Buttons[0].Visible := True;
|
|
CodClienteFinal.Properties.OnValidate := CodClienteFinalPropertiesValidate;
|
|
Poblacion.VerBoton := True;
|
|
Provincia.VerBoton := True;
|
|
|
|
ActivarEdicionGridDetalles(gridDetallesView);
|
|
|
|
(gridDetallesView.GetColumnByFieldName('CODIGOARTICULO').Properties as TcxButtonEditProperties).OnButtonClick := GridBotonCodigoArticuloClick;
|
|
|
|
{ (gridDetalles.ColumnByFieldName('DESCRIPCION')
|
|
as TdxDBTreeListButtonColumn).OnEditButtonClick := GridBotonDescripcionClick;}
|
|
|
|
pnlBarraGrid.Visible := True;
|
|
try
|
|
TablaPresupuestos.Prepare;
|
|
TablaPresupuestos.Open;
|
|
TablaPresupuestos.FieldByName('PROVINCIA').OnSetText := ProvinciaSetText;
|
|
|
|
if TablaPresupuestos.RecordCount = 0 then
|
|
begin
|
|
VerMensajeFmt(msgPreNoExistePre, [CodigoPresupuesto]);
|
|
CancelarModificar;
|
|
CloseFrame;
|
|
Exit;
|
|
end;
|
|
|
|
TablaPresupuestos.Edit;
|
|
TablaPresupuestos.Post;
|
|
TablaPresupuestos.Edit;
|
|
|
|
with TablaDetallesPresupuestos do
|
|
begin
|
|
Close;
|
|
ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
Params.ByName('CODIGOPRESUPUESTO').AsString := CodigoPresupuesto;
|
|
Prepare;
|
|
Open;
|
|
end;
|
|
|
|
with TablaDetallesMem do
|
|
begin
|
|
Close;
|
|
Open;
|
|
CargarDetalles;
|
|
ActivarEventosCampos;
|
|
CalcularTotalPresupuesto;
|
|
end;
|
|
|
|
dmTablaPresupuestos.InicializarTablaPresupuestos(@TablaPresupuestos);
|
|
dmTablaPresupuestos.InicializarTablaDetalles(@TablaDetallesMem);
|
|
|
|
//Establecemos si hay o no bonificación
|
|
if not VarIsNull(TablaPresupuestos.FieldByName('DESBONIFICACION').AsVariant) then
|
|
cxBonificacion.Checked := True;
|
|
cxBonificacion.Properties.ReadOnly := False;
|
|
|
|
Visible := True;
|
|
except
|
|
on E : EIBError do
|
|
begin
|
|
case E.IBErrorCode of
|
|
isc_lock_conflict : begin
|
|
VerMensajeFmt(msgPreBloqueado, [CodigoPresupuesto]);
|
|
CancelarModificar;
|
|
CloseFrame;
|
|
Exit;
|
|
end
|
|
else
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrPresupuestoCliente.AnadirDatos: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
CalcularTotalPresupuesto;
|
|
TablaPresupuestos.Post;
|
|
TablaPresupuestos.ApplyUpdates;
|
|
|
|
BorrarDetallesIB;
|
|
SalvarDetalles;
|
|
|
|
dmTablaPresupuestos.IncrementarCodigo;
|
|
FCodigoPresupuesto := TablaPresupuestos.FieldByName('CODIGO').AsString;
|
|
Commit;
|
|
TablaPresupuestos.CachedUpdates := False;
|
|
TablaPresupuestos.Close;
|
|
TablaDetallesPresupuestos.Close;
|
|
TablaDetallesMem.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do begin
|
|
if E.IBErrorCode = isc_unique_key_violation then begin
|
|
VerMensajeFmt(msgPreCodPreRepetido, [Codigo.DataBinding.Field.AsString]);
|
|
TablaPresupuestos.Edit;
|
|
end
|
|
else
|
|
TratarExcepcion(E);
|
|
end;
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.BuscarPresupuesto;
|
|
begin
|
|
if Transaccion = NIL then
|
|
Exit;
|
|
try
|
|
TablaPresupuestos.DisableControls;
|
|
TablaDetallesPresupuestos.DisableControls;
|
|
TablaDetallesMem.DisableControls;
|
|
|
|
TablaPresupuestos.Close;
|
|
TablaDetallesPresupuestos.Close;
|
|
|
|
// Buscar la fila a tratar si es necesario
|
|
if not EsCadenaVacia(FCodigoPresupuesto) then
|
|
begin
|
|
TablaPresupuestos.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
TablaPresupuestos.Params.ByName('CODIGO').AsString := FCodigoPresupuesto;
|
|
|
|
TablaDetallesPresupuestos.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
TablaDetallesPresupuestos.Params.ByName('CODIGOPRESUPUESTO').AsString := FCodigoPresupuesto;
|
|
end;
|
|
|
|
TablaPresupuestos.Prepare;
|
|
TablaPresupuestos.Open;
|
|
|
|
TablaDetallesPresupuestos.Prepare;
|
|
TablaDetallesPresupuestos.Open;
|
|
|
|
TablaDetallesMem.Close;
|
|
TablaDetallesMem.Open;
|
|
|
|
BorrarDetalles;
|
|
CargarDetalles;
|
|
|
|
dmTablaPresupuestos.InicializarTablaPresupuestos(@TablaPresupuestos);
|
|
dmTablaPresupuestos.InicializarTablaDetalles(@TablaDetallesMem);
|
|
|
|
TablaPresupuestos.EnableControls;
|
|
TablaDetallesPresupuestos.EnableControls;
|
|
TablaDetallesMem.EnableControls;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.CalcularTotalDetalle;
|
|
var
|
|
auxCantidad,
|
|
auxPrecio,
|
|
auxMinutos,
|
|
auxPlus,
|
|
auxTotal,
|
|
TotalAnt,
|
|
TotalPre : double;
|
|
begin
|
|
with TablaDetallesMem do
|
|
begin
|
|
auxCantidad := FieldByName('CANTIDAD').AsFloat;
|
|
auxPrecio := FieldByName('PRECIOUNIDAD').AsFloat;
|
|
auxMinutos := FieldByName('MINUTOS').AsFloat * FieldByName('PRECIOMINUTO').AsFloat;
|
|
auxPlus := FieldByName('PLUS').AsFloat;
|
|
auxTotal := (auxCantidad * auxPrecio) + auxMinutos;
|
|
auxTotal := auxTotal + (auxTotal * (auxPlus / 100));
|
|
if auxCantidad > 0 then
|
|
FieldByName('PRECIO').AsFloat := auxTotal / auxCantidad
|
|
else
|
|
FieldByName('PRECIO').AsFloat := 0;
|
|
TotalAnt := FieldByName('TOTAL').AsFloat;
|
|
FieldByName('TOTAL').AsFloat := auxTotal;
|
|
end;
|
|
TotalPre := TablaPresupuestos.FieldByName('IMPORTETOTAL').AsFloat;
|
|
TotalPre := TotalPre - TotalAnt;
|
|
TotalPre := TotalPre + auxTotal;
|
|
TablaPresupuestos.FieldByName('IMPORTETOTAL').AsFloat := TotalPre;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.CalcularTotalPresupuesto;
|
|
var
|
|
ImporteTotal : Double;
|
|
FDetallesBookmark : string;
|
|
begin
|
|
ImporteTotal := 0;
|
|
with TablaDetallesMem do
|
|
begin
|
|
DisableControls;
|
|
FDetallesBookmark := Bookmark;
|
|
try
|
|
First;
|
|
while not EOF do begin
|
|
ImporteTotal := ImporteTotal + FieldByName('TOTAL').AsFloat;
|
|
Next;
|
|
end;
|
|
|
|
//Restamos la bonificacion si la tuviera
|
|
if cxBonificacion.Checked then
|
|
ImporteTotal := ImporteTotal - TablaPresupuestos.FieldByName('IMPBONIFICACION').AsFloat;
|
|
|
|
finally
|
|
TablaPresupuestos.FieldByName('IMPORTETOTAL').AsFloat := ImporteTotal;
|
|
if RecordCount > 0 then
|
|
Bookmark := FDetallesBookmark;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TfrPresupuestoCliente.CancelarAnadir: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
TablaDetallesMem.Close;
|
|
TablaPresupuestos.CancelUpdates;
|
|
RollBack;
|
|
TablaPresupuestos.CachedUpdates := False;
|
|
TablaPresupuestos.Close;
|
|
TablaDetallesPresupuestos.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrPresupuestoCliente.CancelarEliminar: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
TablaDetallesMem.Close;
|
|
RollBack;
|
|
TablaPresupuestos.Close;
|
|
TablaDetallesPresupuestos.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrPresupuestoCliente.CancelarModificar: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
TablaDetallesMem.Close;
|
|
RollBack;
|
|
TablaPresupuestos.Close;
|
|
TablaDetallesPresupuestos.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
function TfrPresupuestoCliente.ComprobarDatos: Boolean;
|
|
var
|
|
AuxNumDetalles : integer;
|
|
begin
|
|
Result := False;
|
|
|
|
if not (Modo in [Anadir, Modificar, Eliminar]) then
|
|
begin
|
|
Result := True;
|
|
exit;
|
|
end;
|
|
|
|
if Modo = Eliminar then
|
|
begin
|
|
if dmTablaAlmacenes.ExistePresupuestoEnObra(CodigoPresupuesto) then
|
|
begin
|
|
VerMensaje(msgPreNoEliminarEnObra);
|
|
Exit;
|
|
end;
|
|
end;
|
|
|
|
if EsCadenaVacia(FechaAlta.DataBinding.Field.AsString) then
|
|
begin
|
|
VerMensaje(msgPreFaltaFecAlta);
|
|
FechaAlta.SetFocus;
|
|
Exit;
|
|
end;
|
|
|
|
if ((UpperCase(Situacion.Field.AsString) = CTE_ACEPTADO) or
|
|
(UpperCase(Situacion.Field.AsString) = CTE_ANULADO)) and
|
|
EsCadenaVacia(FechaDecision.DataBinding.Field.AsString) then
|
|
begin
|
|
VerMensaje(msgPreFaltaFecDecision);
|
|
FechaDecision.SetFocus;
|
|
Exit;
|
|
end;
|
|
|
|
if (UpperCase(Situacion.Field.AsString) = CTE_PENDIENTE) and
|
|
not EsCadenaVacia(FechaDecision.DataBinding.Field.AsString) then
|
|
begin
|
|
VerMensaje(msgPreSobraFecDecision);
|
|
FechaDecision.SetFocus;
|
|
Exit;
|
|
end;
|
|
|
|
if EsCadenaVacia(Nombre.Field.AsString) then
|
|
begin
|
|
VerMensaje(msgPreFaltaNombreCli);
|
|
Paginas.ActivePageIndex := 0;
|
|
Nombre.SetFocus;
|
|
Exit;
|
|
end;
|
|
|
|
if TablaDetallesMem.IsEmpty then
|
|
begin
|
|
VerMensaje(msgPreFaltaArticulos);
|
|
Paginas.ActivePageIndex := 1;
|
|
gridDetalles.SetFocus;
|
|
Exit
|
|
end;
|
|
|
|
if cxBonificacion.Checked then
|
|
begin
|
|
if VarIsNull(TablaPresupuestos.FieldByName('DESBONIFICACION').AsVariant) then
|
|
begin
|
|
VerMensaje(msgPreFaltasDatosBoni);
|
|
Paginas.ActivePageIndex := 1;
|
|
DesBonificacion.SetFocus;
|
|
Exit
|
|
end;
|
|
|
|
if VarIsNull(TablaPresupuestos.FieldByName('IMPBONIFICACION').AsVariant) then
|
|
begin
|
|
VerMensaje(msgPreFaltasDatosBoni);
|
|
Paginas.ActivePageIndex := 1;
|
|
ImpBonificacion.SetFocus;
|
|
Exit
|
|
end;
|
|
end;
|
|
|
|
Result := True;
|
|
end;
|
|
|
|
constructor TfrPresupuestoCliente.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FCodigoProvincia := NULL;
|
|
FCodigoPoblacion := NULL;
|
|
FCodigoCliente := NULL;
|
|
FCodigoArticulo := NULL;
|
|
|
|
Entidad := entPresupuestoCliente;
|
|
ConfigurarFrame(Self, Self.Entidad);
|
|
|
|
BaseDatos := dmBaseDatos.BD;
|
|
|
|
Transaccion := dmBaseDatos.Transaccion;
|
|
|
|
TablaPresupuestos := TIBDataSet.Create(Self);
|
|
TablaDetallesPresupuestos := TIBDataSet.Create(Self);
|
|
TablaDetallesMem := TRxMemoryData.Create(Self);
|
|
|
|
dsPresupuesto.DataSet := TablaPresupuestos;
|
|
dsDetallesPresupuesto.DataSet := TablaDetallesMem;
|
|
|
|
with TablaPresupuestos do
|
|
begin
|
|
Database := BaseDatos;
|
|
Transaction := Transaccion;
|
|
SelectSQL.Assign(dmTablaPresupuestos.sqlConsultarPresupuesto);
|
|
InsertSQL.Assign(dmTablaPresupuestos.sqlInsertarPresupuesto);
|
|
ModifySQL.Assign(dmTablaPresupuestos.sqlModificarPresupuesto);
|
|
DeleteSQL.Assign(dmTablaPresupuestos.sqlEliminarPresupuesto);
|
|
end;
|
|
|
|
with TablaDetallesPresupuestos do
|
|
begin
|
|
Database := BaseDatos;
|
|
Transaction := Transaccion;
|
|
SelectSQL.Assign(dmTablaPresupuestos.sqlConsultarGridDetalles);
|
|
InsertSQL.Assign(dmTablaPresupuestos.sqlInsertarDetalles);
|
|
ModifySQL.Assign(dmTablaPresupuestos.sqlModificarDetalles);
|
|
DeleteSQL.Assign(dmTablaPresupuestos.sqlEliminarDetalles);
|
|
end;
|
|
|
|
try
|
|
TablaDetallesMem.CopyStructure(TablaDetallesPresupuestos);
|
|
TablaDetallesMem.FieldByName('CODIGOEMPRESA').Required := False;
|
|
TablaDetallesMem.FieldByName('CODIGOPRESUPUESTO').Required := False;
|
|
TablaDetallesMem.FieldByName('NUMCONCEPTO').Required := False;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
|
|
dmTablaPresupuestos.InicializarGridDetalles(gridDetallesView);
|
|
Situacion.Items := dmTablaPresupuestos.darSituaciones;
|
|
Paginas.ActivePage := pagCliente;
|
|
end;
|
|
|
|
destructor TfrPresupuestoCliente.Destroy;
|
|
begin
|
|
gridDetallesView.DataController.DataSource := NIL;
|
|
|
|
TablaDetallesMem.Close;
|
|
TablaDetallesMem.Free;
|
|
|
|
TablaPresupuestos.Close;
|
|
TablaPresupuestos.UnPrepare;
|
|
TablaPresupuestos.Free;
|
|
|
|
TablaDetallesPresupuestos.Close;
|
|
TablaDetallesPresupuestos.Unprepare;
|
|
TablaDetallesPresupuestos.Free;
|
|
|
|
inherited;
|
|
end;
|
|
|
|
function TfrPresupuestoCliente.EliminarDatos: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
TablaPresupuestos.Delete;
|
|
Commit;
|
|
BorrarDetalles;
|
|
TablaPresupuestos.Close;
|
|
TablaDetallesPresupuestos.Close;
|
|
TablaDetallesMem.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
begin
|
|
case E.IBErrorCode of
|
|
isc_lock_conflict : VerMensajeFmt(msgPreBloqueado, [Codigo.DataBinding.Field.AsString]);
|
|
else
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.FreeContenido;
|
|
var
|
|
Contador : integer;
|
|
ListaCodigos : TStringList;
|
|
begin
|
|
if (ContenidoModal is TRdxFramePresupuestos) then begin
|
|
CodigoPresupuesto := (ContenidoModal as TRdxFramePresupuestos).CodigoPresupuesto;
|
|
ActivarModo;
|
|
end;
|
|
if (ContenidoModal is TRdxFrameArticulos) then
|
|
begin
|
|
ListaCodigos := (ContenidoModal as TRdxFrameArticulos).ListaArticulos;
|
|
for Contador := 0 to ListaCodigos.Count - 1 do
|
|
begin
|
|
CodigoArticulo := ListaCodigos.Strings[Contador];
|
|
bAnadirConClick(Self);
|
|
end;
|
|
TablaDetallesMem.Delete;
|
|
end;
|
|
|
|
if (ContenidoModal is TfrEditorDescripcion) then
|
|
begin
|
|
TablaDetallesMem.FieldByName('DESCRIPCION').AsString := (ContenidoModal as TfrEditorDescripcion).Texto;
|
|
TablaDetallesMem.Post;
|
|
TablaDetallesMem.Edit;
|
|
end;
|
|
|
|
if (ContenidoModal is TRdxFrameClientes) then
|
|
FCodigoClienteAux := (ContenidoModal as TRdxFrameClientes).CodigoCliente;
|
|
if (ContenidoModal is TRdxFrameProvincias) then
|
|
CodigoProvincia := (ContenidoModal as TRdxFrameProvincias).CodigoProvincia;
|
|
if (ContenidoModal is TRdxFramePoblaciones) then begin
|
|
CodigoProvincia := (ContenidoModal as TRdxFramePoblaciones).CodigoProvincia;
|
|
CodigoPoblacion := (ContenidoModal as TRdxFramePoblaciones).CodigoPoblacion;
|
|
end;
|
|
inherited FreeContenido;
|
|
end;
|
|
|
|
function TfrPresupuestoCliente.ModificarDatos: Boolean;
|
|
begin
|
|
Result := False;
|
|
try
|
|
CalcularTotalPresupuesto;
|
|
TablaPresupuestos.Post;
|
|
BorrarDetallesIB;
|
|
SalvarDetalles;
|
|
Commit;
|
|
TablaPresupuestos.Close;
|
|
TablaDetallesPresupuestos.Close;
|
|
TablaDetallesMem.Close;
|
|
Result := True;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.SetCodigoArticulo(Value: Variant);
|
|
var
|
|
DatosArticulo : TDatosArticulo;
|
|
begin
|
|
if VarIsNull(Value) then
|
|
exit;
|
|
DatosArticulo := TDatosArticulo.Create;
|
|
DatosArticulo.Codigo := Value;
|
|
try
|
|
if dmTablaArticulos.darDatosArticulo(DatosArticulo) then
|
|
begin
|
|
with TablaDetallesMem do
|
|
begin
|
|
Edit;
|
|
FieldByName('TIPO').AsString := 'CON';
|
|
FieldByName('CODIGOARTICULO').AsString := DatosArticulo.Codigo;
|
|
FieldByName('DESCRIPCION').AsString := DatosArticulo.Descripcion;
|
|
|
|
if EsCadenaVacia(FieldByName('CANTIDAD').AsString) then
|
|
FieldByName('CANTIDAD').AsString := '1';
|
|
|
|
if EsCadenaVacia(FieldByName('UNIDADESMEDIDA').AsString) then
|
|
FieldByName('UNIDADESMEDIDA').AsString := DatosArticulo.Unidadesmedida;
|
|
|
|
if EsCadenaVacia(FieldByName('PRECIOUNIDAD').AsString) then
|
|
FieldByName('PRECIOUNIDAD').AsString := DatosArticulo.Precio;
|
|
|
|
if EsCadenaVacia(FieldByName('PRECIO').AsString) then
|
|
FieldByName('PRECIO').AsString := DatosArticulo.Precio;
|
|
|
|
if EsCadenaVacia(FieldByName('TOTAL').AsString) then
|
|
FieldByName('TOTAL').AsString := DatosArticulo.Precio;
|
|
Post;
|
|
end;
|
|
FCodigoArticulo := Value;
|
|
CalcularTotalPresupuesto;
|
|
end
|
|
else
|
|
raise Exception.CreateFmt(msgArtCodArtNoExiste, [Value]);
|
|
finally
|
|
DatosArticulo.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.SetCodigoCliente(Value: Variant);
|
|
var
|
|
DatosCliente : TDatosCliente;
|
|
begin
|
|
if VarIsNull(Value) then
|
|
exit;
|
|
|
|
FCodigoCliente := Value;
|
|
DatosCliente := TDatosCliente.Create;
|
|
try
|
|
DatosCliente.Codigo := FCodigoCliente;
|
|
dmTablaClientes.darDatosCliente(DatosCliente);
|
|
CodCliente.DataBinding.Field.AsString := DatosCliente.Codigo;
|
|
NIF.Field.AsString := DatosCliente.Nifcif;
|
|
Nombre.Field.AsString := DatosCliente.Nombre;
|
|
PersonaContacto.Field.AsString := DatosCliente.PersonaContacto;
|
|
Telefono.Field.AsString := DatosCliente.Telefono1;
|
|
Fax.Field.AsString := DatosCliente.Fax;
|
|
Calle.Field.AsString := DatosCliente.Calle;
|
|
Numero.Field.AsString := DatosCliente.Numero;
|
|
Piso.Field.AsString := DatosCliente.Piso;
|
|
CodigoPostal.Field.AsString := DatosCliente.CodigoPostal;
|
|
Poblacion.Field.AsString := DatosCliente.Poblacion;
|
|
Provincia.Field.AsString := DatosCliente.Provincia;
|
|
FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(DatosCliente.Provincia);
|
|
CalcularTotalPresupuesto;
|
|
finally
|
|
DatosCliente.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.SetCodigoPoblacion(Value: Variant);
|
|
begin
|
|
if (not VarIsNull(FCodigoPoblacion)) and (FCodigoPoblacion = Value) then
|
|
exit;
|
|
|
|
if (not VarIsNull(Value)) then
|
|
begin
|
|
FCodigoPoblacion := Value;
|
|
Poblacion.Field.AsString := dmTablaPoblaciones.darNombrePoblacion(FCodigoProvincia, FCodigoPoblacion);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.SetCodigoProvincia(Value: Variant);
|
|
begin
|
|
if (not VarIsNull(FCodigoProvincia)) and (FCodigoProvincia = Value) then
|
|
exit;
|
|
|
|
if (not VarIsNull(Value)) then
|
|
begin
|
|
FCodigoProvincia := Value;
|
|
Provincia.Field.AsString := dmTablaProvincias.darNombreProvincia(FCodigoProvincia);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.VerModal;
|
|
begin
|
|
if (ContenidoModal is TRdxFramePoblaciones) then
|
|
(ContenidoModal as TRdxFramePoblaciones).CodigoProvincia := CodigoProvincia;
|
|
if (ContenidoModal is TRdxFrameArticulos) then
|
|
(ContenidoModal as TRdxFrameArticulos).CodigoArticulo := CodigoArticulo;
|
|
if (ContenidoModal is TfrEditorDescripcion) then
|
|
(ContenidoModal as TfrEditorDescripcion).Texto := TablaDetallesMem.FieldByName('DESCRIPCION').AsString;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.bSalirClick(Sender: TObject);
|
|
begin
|
|
try
|
|
Rollback;
|
|
CloseFrame;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.bGuardarClick(Sender: TObject);
|
|
begin
|
|
if (RealizarOperacion) then
|
|
CloseFrame;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.bCancelarClick(Sender: TObject);
|
|
begin
|
|
if (TratarCambios = IDOK) then
|
|
CloseFrame;
|
|
end;
|
|
|
|
|
|
procedure TfrPresupuestoCliente.CodigoArticuloDetalleSetText(
|
|
Sender: TField; const Text: String);
|
|
var
|
|
Codigo : String;
|
|
begin
|
|
if (EsCadenaVacia(Text)) then
|
|
begin
|
|
Sender.AsString := '';
|
|
exit;
|
|
end;
|
|
|
|
Codigo := Trim(Text);
|
|
if (dmTablaArticulos.validarCodigo(Codigo)) then
|
|
Codigo := dmTablaArticulos.formatearCodigo(Codigo)
|
|
else
|
|
raise Exception.CreateFmt(msgArtCodArtIncorrecto, [Codigo]);
|
|
Sender.AsString := Codigo;
|
|
CodigoArticulo := Codigo;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.PlusDetalleSetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
if EsCadenaVacia(Text) then
|
|
Sender.AsString := '0'
|
|
else begin
|
|
validarDto(Text);
|
|
Sender.AsString := Text;
|
|
end;
|
|
CalcularTotalDetalle;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.CantidadDetalleSetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
if EsCadenaVacia(Text) then
|
|
Sender.AsString := '1'
|
|
else
|
|
Sender.AsString := Text;
|
|
CalcularTotalDetalle;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.PrecioDetalleSetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
if EsCadenaVacia(Text) then
|
|
Sender.AsString := '0'
|
|
else
|
|
Sender.AsString := Text;
|
|
CalcularTotalDetalle;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.ProvinciaButtonClick(Sender: TObject);
|
|
begin
|
|
CaptionModal := 'Lista de provincias';
|
|
WidthModal := 280;
|
|
HeightModal := 460;
|
|
ContenidoModal := TfrProvincias.Create(Self);
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.PoblacionButtonClick(Sender: TObject);
|
|
begin
|
|
if (VarIsNull(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 TfrPresupuestoCliente.bAnadirConClick(Sender: TObject);
|
|
begin
|
|
try
|
|
with TablaDetallesMem do
|
|
begin
|
|
DisableControls;
|
|
Next;
|
|
if EOF then
|
|
Append
|
|
else
|
|
Insert;
|
|
EnableControls;
|
|
end;
|
|
Paginas.ActivePage := pagContenido;
|
|
gridDetalles.SetFocus;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.bEliminarClick(Sender: TObject);
|
|
var
|
|
i, j: Integer;
|
|
s: string;
|
|
begin
|
|
if gridDetallesView.Controller.SelectedRowCount > 1 then
|
|
s := msgDeseaBorrarConceptos
|
|
else
|
|
s := msgDeseaBorrar;
|
|
|
|
if (VerMensajePregunta(s) <> 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
|
|
gridDetallesView.DataController.DeleteSelection;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.bEliminarTodoClick(Sender: TObject);
|
|
begin
|
|
if (VerMensajePregunta(msgDeseaBorrarTodo) <> IDYES) then
|
|
Exit;
|
|
BorrarDetalles;
|
|
CalcularTotalPresupuesto;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.MinutosDetalleSetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
if EsCadenaVacia(Text) then
|
|
Sender.AsString := '0'
|
|
else
|
|
Sender.AsString := Text;
|
|
CalcularTotalDetalle;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.PrecioMinutoDetalleSetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
if EsCadenaVacia(Text) then
|
|
Sender.AsString := '0'
|
|
else
|
|
Sender.AsString := Text;
|
|
CalcularTotalDetalle;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.bAnadirCapClick(Sender: TObject);
|
|
begin
|
|
try
|
|
with TablaDetallesMem do
|
|
begin
|
|
DisableControls;
|
|
Next;
|
|
if EOF then
|
|
Append
|
|
else
|
|
Insert;
|
|
Edit;
|
|
FieldByName('TIPO').AsString := 'TIT';
|
|
FieldByName('DESCRIPCION').AsString := 'Nombre del capítulo';
|
|
Post;
|
|
EnableControls;
|
|
end;
|
|
Paginas.ActivePage := pagContenido;
|
|
gridDetalles.SetFocus;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.ActivarEventosCampos;
|
|
begin
|
|
with TablaDetallesMem do
|
|
begin
|
|
FieldByName('CODIGOARTICULO').OnSetText := CodigoArticuloDetalleSetText;
|
|
FieldByName('PLUS').OnSetText := PlusDetalleSetText;
|
|
FieldByName('CANTIDAD').OnSetText := CantidadDetalleSetText;
|
|
FieldByName('PRECIOUNIDAD').OnSetText := PrecioDetalleSetText;
|
|
FieldByName('PRECIOMINUTO').OnSetText := PrecioMinutoDetalleSetText;
|
|
FieldByName('MINUTOS').OnSetText := MinutosDetalleSetText;
|
|
AfterDelete := DetalleAfterDelete;
|
|
AfterInsert := DetalleAfterInsert;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.BorrarDetalles;
|
|
begin
|
|
with TablaDetallesMem do
|
|
begin
|
|
DisableControls;
|
|
EmptyTable;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.SalvarDetalles;
|
|
var
|
|
NumeroCampo : Integer;
|
|
NumConcepto : Integer;
|
|
begin
|
|
try
|
|
with TablaDetallesMem do
|
|
begin
|
|
if IsEmpty then
|
|
Exit;
|
|
NumConcepto := 0;
|
|
DisableControls;
|
|
First;
|
|
while not EOF do
|
|
begin
|
|
TablaDetallesPresupuestos.Append;
|
|
for NumeroCampo := 0 to FieldCount-1 do
|
|
begin
|
|
if Fields[NumeroCampo].FieldName = 'CODIGOEMPRESA' then
|
|
TablaDetallesPresupuestos.Fields[NumeroCampo].AsInteger := EmpresaActiva.Codigo
|
|
else begin
|
|
if Fields[NumeroCampo].FieldName = 'CODIGOPRESUPUESTO' then
|
|
TablaDetallesPresupuestos.Fields[NumeroCampo].AsString := Codigo.DataBinding.Field.AsString
|
|
else
|
|
if Fields[NumeroCampo].FieldName = 'NUMCONCEPTO' then
|
|
TablaDetallesPresupuestos.Fields[NumeroCampo].AsInteger := NumConcepto
|
|
else
|
|
if (Fields[NumeroCampo].FieldName = 'TIPO') and EsCadenaVacia(Fields[NumeroCampo].AsString) then
|
|
TablaDetallesPresupuestos.Fields[NumeroCampo].AsString := 'CON'
|
|
else
|
|
TablaDetallesPresupuestos.Fields[NumeroCampo].AsString := Fields[NumeroCampo].AsString;
|
|
end;
|
|
end;
|
|
TablaDetallesPresupuestos.Post;
|
|
Next;
|
|
NumConcepto := NumConcepto + 1;
|
|
end;
|
|
EnableControls;
|
|
end;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.CargarDetalles;
|
|
var
|
|
NumeroCampo : Integer;
|
|
begin
|
|
with TablaDetallesMem do
|
|
begin
|
|
if TablaDetallesPresupuestos.IsEmpty then
|
|
Exit;
|
|
DisableControls;
|
|
TablaDetallesPresupuestos.First;
|
|
while not TablaDetallesPresupuestos.EOF do
|
|
begin
|
|
Append;
|
|
if not (State in dsEditModes) then
|
|
Edit;
|
|
for NumeroCampo := 0 to TablaDetallesPresupuestos.FieldCount-1 do
|
|
Fields[NumeroCampo].AsString := TablaDetallesPresupuestos.Fields[NumeroCampo].AsString;
|
|
Post;
|
|
TablaDetallesPresupuestos.Next;
|
|
end;
|
|
First;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.BorrarDetallesIB;
|
|
begin
|
|
with TablaDetallesPresupuestos do
|
|
begin
|
|
if IsEmpty then
|
|
Exit;
|
|
DisableControls;
|
|
Last;
|
|
while not BOF do
|
|
begin
|
|
Delete;
|
|
Prior;
|
|
end;
|
|
if not IsEmpty then
|
|
Delete;
|
|
EnableControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.SetCodigoClienteFinal(Value: Variant);
|
|
var
|
|
DatosCliente : TDatosCliente;
|
|
begin
|
|
if VarIsNull(Value) then
|
|
exit;
|
|
|
|
FCodigoClienteFinal := Value;
|
|
DatosCliente := TDatosCliente.Create;
|
|
try
|
|
DatosCliente.Codigo := FCodigoClienteFinal;
|
|
dmTablaClientes.darDatosCliente(DatosCliente);
|
|
CodClienteFinal.DataBinding.Field.AsString := DatosCliente.Codigo;
|
|
NombreClienteFinal.Field.AsString := DatosCliente.Nombre;
|
|
finally
|
|
DatosCliente.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.DetalleAfterDelete(DataSet: TDataSet);
|
|
begin
|
|
CalcularTotalPresupuesto;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.bAnadirOpClick(Sender: TObject);
|
|
begin
|
|
try
|
|
with TablaDetallesMem do
|
|
begin
|
|
DisableControls;
|
|
Next;
|
|
if EOF then
|
|
Append
|
|
else
|
|
Insert;
|
|
Edit;
|
|
FieldByName('TIPO').AsString := 'OPC';
|
|
FieldByName('DESCRIPCION').AsString := 'Nombre del capítulo opcional';
|
|
Post;
|
|
EnableControls;
|
|
end;
|
|
Paginas.ActivePage := pagContenido;
|
|
gridDetalles.SetFocus;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.gridDetalles2Editing(Sender: TObject;
|
|
Node: TdxTreeListNode; var Allow: Boolean);
|
|
var
|
|
IndiceCol : Integer;
|
|
begin
|
|
{ IndiceCol := (Sender as TdxDBGrid).ColumnByFieldName('TIPO').Index;
|
|
if ((Node.Strings[IndiceCol] = 'CON') or EsCadenaVacia(Node.Strings[IndiceCol]))
|
|
then begin
|
|
Allow := True;
|
|
Exit;
|
|
end
|
|
else
|
|
begin
|
|
if (gridDetalles.FocusedField.FieldName <> 'DESCRIPCION') then
|
|
Allow := False;
|
|
end;}
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.gridDetalles2CustomDrawCell(Sender: TObject;
|
|
ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
|
|
AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
|
|
var AText: String; var AColor: TColor; AFont: TFont;
|
|
var AAlignment: TAlignment; var ADone: Boolean);
|
|
var
|
|
IndiceCol : Integer;
|
|
begin
|
|
IndiceCol := (Sender as TdxDBGrid).ColumnByFieldName('TIPO').Index;
|
|
if ((ANode.Strings[IndiceCol] = 'CON') or EsCadenaVacia(ANode.Strings[IndiceCol])) then
|
|
Exit;
|
|
if ANode.Strings[IndiceCol] <> 'CON' then
|
|
begin
|
|
AFont.Style := AFont.Style + [fsBold];
|
|
if ANode.Strings[IndiceCol] = 'OPC' then
|
|
AFont.Style := AFont.Style + [fsItalic];
|
|
if (not ASelected) and (not Focused) then
|
|
AColor := rdxLightGreen;
|
|
end;
|
|
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.CopiarDatosPresupuesto;
|
|
var
|
|
DatosPre : TDatosPresupuesto;
|
|
begin
|
|
DatosPre := TDatosPresupuesto.Create;
|
|
DatosPre.Codigo := CodigoPresupuestoOrigen;
|
|
DatosPre.CodigoEmpresa := EmpresaActiva.Codigo;
|
|
try
|
|
if dmTablaPresupuestos.DarDatosPresupuesto(DatosPre) then
|
|
begin
|
|
CodCliente.DataBinding.Field.AsString := DatosPre.CodigoCliente;
|
|
NIF.Field.AsString := DatosPre.NIFCIF;
|
|
Nombre.Field.AsString := DatosPre.Nombre;
|
|
Calle.Field.AsString := DatosPre.Calle;
|
|
Numero.Field.AsString := DatosPre.Numero;
|
|
Piso.Field.AsString := DatosPre.Piso;
|
|
CodigoPostal.Field.AsString := DatosPre.CodigoPostal;
|
|
Poblacion.Field.AsString := DatosPre.Poblacion;
|
|
Provincia.Field.AsString := DatosPre.Provincia;
|
|
FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(DatosPre.Provincia);
|
|
PersonaContacto.Field.AsString := DatosPre.PersonaContacto;
|
|
Telefono.Field.AsString := DatosPre.Telefono;
|
|
Fax.Field.AsString := DatosPre.Fax;
|
|
CodClienteFinal.DataBinding.Field.AsString := DatosPre.CodigoClienteFinal;
|
|
NombreClienteFinal.Field.AsString := DatosPre.NombreClienteFinal;
|
|
Portada.Field.AsString := DatosPre.Portada;
|
|
Memoria.Field.AsString := DatosPre.Descripcion;
|
|
Notas.Field.AsString := DatosPre.Notas;
|
|
|
|
CopiarConceptosPresupuesto;
|
|
CalcularTotalPresupuesto;
|
|
end
|
|
finally
|
|
DatosPre.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.CopiarConceptosPresupuesto;
|
|
var
|
|
oSQL : TIBSQL;
|
|
begin
|
|
oSQL := TIBSQL.Create(Self);
|
|
with oSQL do
|
|
begin
|
|
Database := dmBaseDatos.BD;
|
|
Transaction := dmBaseDatos.Transaccion;
|
|
SQL.Add('select * ');
|
|
SQL.Add('from DETALLESPRESUPUESTOSCLIENTE ');
|
|
SQL.Add('where CODIGOPRESUPUESTO = :CODIGOPRESUPUESTO and ');
|
|
SQL.Add('CODIGOEMPRESA = :CODIGOEMPRESA ');
|
|
SQL.Add('order by NUMCONCEPTO');
|
|
end;
|
|
|
|
try
|
|
with TablaDetallesMem do
|
|
begin
|
|
oSQL.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
|
|
oSQL.ParamByName('CODIGOPRESUPUESTO').AsString := CodigoPresupuestoOrigen;
|
|
oSQL.Prepare;
|
|
oSQL.ExecQuery;
|
|
|
|
DisableControls;
|
|
while ((not oSQL.EOF)) do // and (oSQL.RowsAffected > 0)) do
|
|
begin
|
|
Append;
|
|
if not (State in dsEditModes) then
|
|
Edit;
|
|
FieldByName('CODIGOPRESUPUESTO').AsString := Codigo.DataBinding.Field.AsString;
|
|
FieldByName('NUMCONCEPTO').AsInteger := oSQL.FieldByName('NUMCONCEPTO').AsInteger;
|
|
FieldByName('TIPO').AsString := oSQL.FieldByName('TIPO').AsString;
|
|
FieldByName('CODIGOARTICULO').AsString := oSQL.FieldByName('CODIGOARTICULO').AsString;
|
|
FieldByName('DESCRIPCION').AsString := oSQL.FieldByName('DESCRIPCION').AsString;
|
|
FieldByName('CANTIDAD').AsString := oSQL.FieldByName('CANTIDAD').AsString;
|
|
FieldByName('UNIDADESMEDIDA').AsString := oSQL.FieldByName('UNIDADESMEDIDA').AsString;
|
|
FieldByName('PRECIOUNIDAD').AsString := oSQL.FieldByName('PRECIOUNIDAD').AsString;
|
|
FieldByName('PRECIO').AsString := oSQL.FieldByName('PRECIO').AsString;
|
|
FieldByName('MINUTOS').AsString := oSQL.FieldByName('MINUTOS').AsString;
|
|
FieldByName('PRECIOMINUTO').AsString := oSQL.FieldByName('PRECIOMINUTO').AsString;
|
|
FieldByName('PLUS').AsString := oSQL.FieldByName('PLUS').AsString;
|
|
FieldByName('TOTAL').AsString := oSQL.FieldByName('TOTAL').AsString;
|
|
Post;
|
|
oSQL.Next;
|
|
end;
|
|
First;
|
|
EnableControls;
|
|
end;
|
|
except
|
|
on E : EIBError do
|
|
TratarExcepcion(E);
|
|
on E : Exception do
|
|
TratarExcepcion(E);
|
|
end;
|
|
oSQL.Close;
|
|
oSQL.Transaction := NIL;
|
|
oSQL.Free;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.GridBotonDescripcionClick(Sender: TObject);
|
|
begin
|
|
TablaDetallesMem.Edit;
|
|
WidthModal := 420;
|
|
HeightModal := 435;
|
|
ModoModal := Modo;
|
|
ContenidoModal := TfrEditorDescripcion.Create(Self);
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.ProvinciaSetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
FCodigoProvincia := dmTablaProvincias.darCodigoProvincia(Text);
|
|
Sender.AsString := Text;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.RdxFramePresupuestosShow(Sender: TObject);
|
|
begin
|
|
FechaAlta.SetFocus;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.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, FCodigoPresupuesto es NULL y da error al activar modo porque
|
|
no se inicializa los parámetros de la sql. Lo hace BuscarPresupuesto. }
|
|
if not TablaPresupuestos.Active then
|
|
BuscarPresupuesto;
|
|
ContenidoModal := TfrPresupuestosClientes.Create(Self);
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.CodigoPropertiesValidate(Sender: TObject;
|
|
var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
|
|
begin
|
|
inherited;
|
|
if (Modo <> Anadir) or (Visible = false) then
|
|
exit;
|
|
|
|
if EsCadenaVacia(DisplayValue) then
|
|
Codigo.DataBinding.Field.AsString := dmTablaPresupuestos.darNuevoCodigo;
|
|
|
|
if (dmTablaPresupuestos.validarCodigo(DisplayValue)) then
|
|
begin
|
|
Codigo.DataBinding.Field.asString := dmTablaPresupuestos.formatearCodigo(DisplayValue);
|
|
if (dmTablaPresupuestos.ExisteCodigo(EmpresaActiva.Codigo, DisplayValue)) then begin
|
|
VerMensajeFmt(msgPreCodPreRepetido, [DisplayValue]);
|
|
Codigo.SetFocus;
|
|
end
|
|
end
|
|
else begin
|
|
VerMensajeFmt(msgPreCodPreIncorrecto, [Codigo.Text]);
|
|
Codigo.SetFocus;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.CodClientePropertiesButtonClick(
|
|
Sender: TObject; AButtonIndex: Integer);
|
|
begin
|
|
ContenidoModal := TfrClientes.Create(Self);
|
|
CodigoCliente := FCodigoClienteAux;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.CodClientePropertiesValidate(
|
|
Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
|
|
var Error: Boolean);
|
|
begin
|
|
if not (Modo in [Anadir, Modificar]) then
|
|
Exit;
|
|
|
|
if EsCadenaVacia(DisplayValue) then
|
|
Exit;
|
|
|
|
if (dmTablaClientes.validarCodigo(DisplayValue)) then begin
|
|
//Comprueba que le numero es lo sufucientemente pequeño para ser un entero
|
|
if not EsSmallInt(DisplayValue) then
|
|
begin
|
|
VerMensajeFmt(msgCliCodCliIncorrecto,[DisplayValue]);
|
|
DisplayValue := '0';
|
|
Codigo.SetFocus;
|
|
end
|
|
else
|
|
begin
|
|
DisplayValue := dmTablaClientes.formatearCodigo(DisplayValue);
|
|
if (dmTablaClientes.existeCodigo(DisplayValue)) then
|
|
CodigoCliente := DisplayValue
|
|
else begin
|
|
VerMensajeFmt(msgCliCodCliNoExiste, [DisplayValue]);
|
|
Paginas.ActivePageIndex := 0;
|
|
CodCliente.SetFocus;
|
|
end;
|
|
end;
|
|
end
|
|
else begin
|
|
VerMensajeFmt(msgCliCodCliIncorrecto, [DisplayValue]);
|
|
Paginas.ActivePageIndex := 0;
|
|
CodCliente.SetFocus;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.CodClienteFinalPropertiesButtonClick(
|
|
Sender: TObject; AButtonIndex: Integer);
|
|
begin
|
|
ContenidoModal := TfrClientes.Create(Self);
|
|
CodigoClienteFinal := FCodigoClienteAux;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.CodClienteFinalPropertiesValidate(
|
|
Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
|
|
var Error: Boolean);
|
|
begin
|
|
if not (Modo in [Anadir, Modificar]) then
|
|
Exit;
|
|
|
|
if EsCadenaVacia(DisplayValue) then
|
|
Exit;
|
|
|
|
if (dmTablaClientes.validarCodigo(DisplayValue)) then begin
|
|
//Comprueba que le numero es lo sufucientemente pequeño para ser un entero
|
|
if not EsSmallInt(DisplayValue) then
|
|
begin
|
|
VerMensajeFmt(msgCliCodCliIncorrecto,[DisplayValue]);
|
|
DisplayValue := '0';
|
|
Codigo.SetFocus;
|
|
end
|
|
else
|
|
begin
|
|
DisplayValue := dmTablaClientes.FormatearCodigo(DisplayValue);
|
|
if (dmTablaClientes.ExisteCodigo(DisplayValue)) then
|
|
CodigoClienteFinal := DisplayValue
|
|
else
|
|
begin
|
|
VerMensajeFmt(msgCliCodCliNoExiste, [DisplayValue]);
|
|
Paginas.ActivePage := pagCliente;
|
|
CodClienteFinal.SetFocus;
|
|
end;
|
|
end;
|
|
end
|
|
else begin
|
|
VerMensajeFmt(msgCliCodCliIncorrecto, [DisplayValue]);
|
|
Paginas.ActivePage := pagCliente;
|
|
CodClienteFinal.SetFocus;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.cxBonificacionPropertiesChange(
|
|
Sender: TObject);
|
|
begin
|
|
if cxBonificacion.Checked then
|
|
begin
|
|
DesBonificacion.Enabled := True;
|
|
ImpBonificacion.Enabled := True;
|
|
TablaPresupuestos.FieldByName('IMPBONIFICACION').OnSetText := ImpBonificacionSetText;
|
|
end
|
|
else
|
|
begin
|
|
DesBonificacion.Enabled := False;
|
|
ImpBonificacion.Enabled := False;
|
|
TablaPresupuestos.FieldByName('IMPBONIFICACION').OnSetText := Nil;
|
|
TablaPresupuestos.FieldByName('DESBONIFICACION').AsVariant := Null;
|
|
TablaPresupuestos.FieldByName('IMPBONIFICACION').AsVariant := Null;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.ImpBonificacionSetText(Sender: TField;
|
|
const Text: String);
|
|
begin
|
|
Sender.AsString := Text;
|
|
if not EsCadenaVacia(Text) then
|
|
CalcularTotalPresupuesto;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.DetalleAfterInsert(DataSet: TDataSet);
|
|
begin
|
|
DataSet.DisableControls;
|
|
try
|
|
DataSet.Edit;
|
|
DataSet.FieldByName('TIPO').AsString := 'CON';
|
|
DataSet.Post;
|
|
finally
|
|
DataSet.EnableControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.gridDetallesViewEditing(
|
|
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem;
|
|
var AAllow: Boolean);
|
|
var
|
|
IndiceCol : Integer;
|
|
begin
|
|
AAllow := True;
|
|
IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName('TIPO').Index;
|
|
if ((UpperCase(AItem.GridView.Items[IndiceCol].EditValue) = 'CON') or
|
|
EsCadenaVacia(AItem.GridView.Items[IndiceCol].EditValue))
|
|
then begin
|
|
AAllow := True;
|
|
Exit;
|
|
end
|
|
else begin
|
|
if (AItem.DataBinding as TcxGridItemDBDataBinding).FieldName <> 'DESCRIPCION' then
|
|
AAllow := False;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.gridDetallesViewCustomDrawCell(
|
|
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
|
|
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
|
|
var
|
|
IndiceCol : Integer;
|
|
begin
|
|
IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName('TIPO').Index;
|
|
if ((UpperCase(AViewInfo.GridRecord.DisplayTexts[IndiceCol]) <> 'CON') and
|
|
(not EsCadenaVacia(AViewInfo.GridRecord.DisplayTexts[IndiceCol]))) then
|
|
begin
|
|
ACanvas.Font.Style := ACanvas.Font.Style + [fsBold];
|
|
|
|
if (UpperCase(AViewInfo.GridRecord.DisplayTexts[IndiceCol]) = 'OPC') then
|
|
ACanvas.Font.Style := ACanvas.Font.Style + [fsItalic];
|
|
|
|
if (not AViewInfo.Selected) and (not AViewInfo.Focused) then
|
|
ACanvas.Brush.Color := rdxLightGreen;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrPresupuestoCliente.GridBotonCodigoArticuloClick(
|
|
Sender: TObject; AButtonIndex: Integer);
|
|
begin
|
|
TablaDetallesMem.Edit;
|
|
ContenidoModal := TfrArticulos.Create(Self);
|
|
end;
|
|
|
|
end.
|
|
|