This repository has been archived on 2024-12-02. You can view files and clone it, but cannot push or open issues or pull requests.
FactuGES/Clientes/PresupuestosClientes.pas
2007-06-26 08:08:27 +00:00

655 lines
20 KiB
ObjectPascal

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