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/_Obras_/Obra2.pas
2007-06-26 08:08:27 +00:00

1472 lines
41 KiB
ObjectPascal
Raw Permalink Blame History

unit Obra2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RdxDBFrame, RdxFrame, cxStyles, cxCustomData, cxGraphics,
cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxGridLevel,
cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView,
cxGridCardView, cxGridDBCardView, cxGrid, RdxBotones, RdxPaneles,
ExtCtrls, cxMaskEdit, cxButtonEdit, cxDBEdit, cxContainer, cxTextEdit,
StdCtrls, ComCtrls, RdxPageControl, cxDropDownEdit, cxCalendar, cxMemo,
AdvPanel, RdxFrameObras, ActnList, RdxBarras, Grids, DBGrids,
JvExExtCtrls, JvComponent, JvItemsPanel, JvExComCtrls, JvHeaderControl,
JvExControls, JvArrayButton, IBCustomDataSet, cxSchedulerStorage,
cxSchedulerDBStorage, Menus, cxScheduler, cxSchedulerCustomControls,
cxSchedulerCustomResourceView, cxSchedulerDayView, RxMemDS,
cxSchedulerDateNavigator, cxSchedulerWeekView, JvExGrids, JvStringGrid,
cxGridTableView, cxGridDBTableView, TablaCitas, IBDatabase, InformeEstadoObra,
cxDBLookupComboBox, IBSQLMonitor, cxLookupEdit, cxDBLookupEdit, IBQuery;
type
TfrObra2 = class(TRdxFrameObras)
Paginas: TRdxPagesControl;
pagPedidos: TTabSheet;
pnlDatosObra: TPanel;
eCodigo: TLabel;
eNIFCIF: TLabel;
eObservaciones: TLabel;
Observaciones: TcxDBMemo;
CodigoContrato: TcxDBTextEdit;
pagGastos: TTabSheet;
Label20: TLabel;
dsObras: TDataSource;
brDoble: TRdxBarraInferior;
bGuardar: TRdxBoton;
bCancelar: TRdxBoton;
DatosCliente: TcxMemo;
Label1: TLabel;
Shape1: TShape;
JvItemsPanel1: TJvItemsPanel;
JvHeaderControl1: TJvHeaderControl;
JvArrayButton1: TJvArrayButton;
dsCitas: TDataSource;
TablaCitas: TIBDataSet;
DBGrid1: TDBGrid;
Splitter1: TSplitter;
cxSchedulerDBStorage: TcxSchedulerDBStorage;
pagEntregas: TTabSheet;
Panel1: TPanel;
JvStringGrid1: TJvStringGrid;
pagMontajes: TTabSheet;
pagRemates: TTabSheet;
pnlOtrosDatos: TPanel;
pnlInstaladores: TPanel;
bEliminar: TRdxBoton;
bAnadir: TRdxBoton;
bEliminarTodo: TRdxBoton;
gridInstaladores: TcxGrid;
gridInstaladoresVista: TcxGridDBTableView;
gridInstaladoresLevel1: TcxGridLevel;
Label4: TLabel;
pnlOtrosGastos: TPanel;
gridOtrosGastos: TcxGrid;
gridOtrosGastosVista: TcxGridDBTableView;
gridOtrosGastosLevel1: TcxGridLevel;
RdxBoton1: TRdxBoton;
RdxBoton2: TRdxBoton;
RdxBoton3: TRdxBoton;
Label5: TLabel;
Splitter2: TSplitter;
pnlDetalleOtro: TRdxPanel;
pnlDatosOtro: TPanel;
Panel2: TPanel;
pnlGridOtro: TPanel;
gridEntregas: TcxGrid;
gridEntregasVista: TcxGridDBTableView;
gridEntregasLevel1: TcxGridLevel;
pnlBarraOtro: TPanel;
bEliminarTareaObra: TRdxBoton;
bAnadirTareaObra: TRdxBoton;
ActionList1: TActionList;
actAceptar: TAction;
actCancelar: TAction;
actAnadirInstalador: TAction;
actEliminarInstalador: TAction;
actAnadirGasto: TAction;
actEliminarGasto: TAction;
actEliminarTodoIns: TAction;
actEliminarTodoGas: TAction;
actAnadirPedido: TAction;
actEliminarPedido: TAction;
actAnadirTareaObra: TAction;
actEliminarEntrega: TAction;
actSalir: TAction;
dsObrasInstaladores: TDataSource;
dsGastos: TDataSource;
Panel3: TPanel;
actAnadirEntrega: TAction;
TablaInstaladores: TIBDataSet;
Panel4: TPanel;
RdxBoton4: TRdxBoton;
RdxBoton5: TRdxBoton;
Panel5: TPanel;
gridMontajes: TcxGrid;
gridMontajesVista: TcxGridDBTableView;
cxGridLevel1: TcxGridLevel;
Panel6: TPanel;
RdxBoton6: TRdxBoton;
RdxBoton7: TRdxBoton;
Panel7: TPanel;
gridRemates: TcxGrid;
gridRematesVista: TcxGridDBTableView;
cxGridLevel2: TcxGridLevel;
actEliminarMontaje: TAction;
actEliminarRemate: TAction;
RdxBoton8: TRdxBoton;
actPrevisualizar: TAction;
dsInstaladores: TDataSource;
FechaFin: TcxDBTextEdit;
lblObraCerrada: TLabel;
Label2: TLabel;
cbxDocumento: TcxDBLookupComboBox;
dsDocumentos: TDataSource;
TablaDocumentos: TIBQuery;
procedure JvArrayButton1ArrayButtonClicked(ACol, ARow: Integer);
procedure JvItemsPanel1Resize(Sender: TObject);
procedure pagPedidosResize(Sender: TObject);
procedure actCancelarExecute(Sender: TObject);
procedure actAceptarExecute(Sender: TObject);
procedure actAnadirInstaladorExecute(Sender: TObject);
procedure actEliminarInstaladorExecute(Sender: TObject);
procedure actEliminarTodoInsExecute(Sender: TObject);
procedure actEliminarTodoGasExecute(Sender: TObject);
procedure actEliminarGastoExecute(Sender: TObject);
procedure actAnadirGastoExecute(Sender: TObject);
procedure pagEntregasShow(Sender: TObject);
procedure pagMontajesShow(Sender: TObject);
procedure pagRematesShow(Sender: TObject);
procedure actAnadirEntregaExecute(Sender: TObject);
procedure gridEntregasVistaDblClick(Sender: TObject);
procedure actEliminarEntregaExecute(Sender: TObject);
procedure actEliminarEntregaUpdate(Sender: TObject);
procedure actEliminarRemateUpdate(Sender: TObject);
procedure actEliminarMontajeUpdate(Sender: TObject);
procedure actPrevisualizarExecute(Sender: TObject);
procedure gridMontajesVistaDblClick(Sender: TObject);
procedure gridRematesVistaDblClick(Sender: TObject);
procedure cxSchedulerDBStorageEventModified(Sender: TObject;
AEvent: TcxSchedulerEvent; var AHandled: Boolean);
procedure actAnadirInstaladorUpdate(Sender: TObject);
procedure actEliminarInstaladorUpdate(Sender: TObject);
procedure actEliminarTodoInsUpdate(Sender: TObject);
procedure actAnadirGastoUpdate(Sender: TObject);
procedure actEliminarGastoUpdate(Sender: TObject);
procedure actEliminarTodoGasUpdate(Sender: TObject);
procedure actAnadirEntregaUpdate(Sender: TObject);
procedure JvStringGrid1ExitCell(Sender: TJvStringGrid; AColumn,
ARow: Integer; const EditText: String);
private
FTablaObrasInstaladores : TIBDataSet;
FTablaObrasGastos: TIBDataSet;
FTablaObrasGastosMem : TRxMemoryData;
FCodigoInstalador: Variant;
FInformeEstadoObra : TdmInformeEstadoObra;
procedure InicializarPantalla;
procedure RellenarArrayBotones;
procedure CrearTablasObra;
procedure CrearTablaCitas;
procedure DestruirTablasObra;
procedure DestruirTablaCitas;
procedure InicializarCampos;
procedure AjustarCabeceras;
procedure TablaCitasBeforePost(DataSet: TDataSet);
procedure TablaCitasAfterPost(DataSet: TDataSet);
procedure SetCodigoInstalador(const Value: Variant);
procedure SalvarDatosGastos;
procedure SalvarProveedores;
function ExisteInstaladorEnOtrasTareas : Boolean;
procedure AplicarFiltroTipoAGrid(aVista : TcxGridDBTableView; aTipo : TTipoCitas);
procedure EditarCita(ID : Variant; bSoloLectura:Boolean); overload;
procedure InsertarCitaEntrega(Const Opcion: Integer);
procedure InsertarCitaFase(Const Tipo: Integer;Const Col: Integer);
procedure DeshabilitarModificar;
procedure HabilitarModificar;
protected
procedure ActivarModoModificarTablasObra;
procedure ActivarModoModificar; override;
procedure ActivarModoConsultar; override;
procedure ActivarModoEliminar; override;
function ModificarDatos : Boolean; override;
function CancelarModificar : Boolean; override;
function CancelarEliminar : Boolean; override;
function ComprobarDatos : Boolean; override;
procedure VerModal; override;
procedure FreeContenido; override;
procedure BuscarObra; override;
function CloseFrame : Boolean; override;
function TratarCambios : integer; override;
public
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
procedure Imprimir;
procedure VistaPrevia;
function EliminarDatos : Boolean; override;
published
property TablaObras;
property CodigoObra;
property CodigoInstalador : Variant read FCodigoInstalador write SetCodigoInstalador;
property TablaObrasInstaladores : TIBDataSet read FTablaObrasInstaladores write FTablaObrasInstaladores;
property TablaObrasGastos : TIBDataSet read FTablaObrasGastos write FTablaObrasGastos;
end;
var
frObra2: TfrObra2;
implementation
uses
cxSchedulerDialogs, RdxFrameInstaladores, Instaladores,
IBErrorCodes, Mensajes, Literales,
IB, Configuracion, BaseDatos, Entidades, TablaObras,
StrFunc, Excepciones, DateUtils, TablaObrasInstaladores,
TablaObrasGastos, TablaInstaladores, TablaTareas, TablaDocumentos;
{$R *.dfm}
{ TfrObra2 }
procedure TfrObra2.ActivarModoConsultar;
begin
inherited;
end;
procedure TfrObra2.ActivarModoEliminar;
begin
inherited;
end;
procedure TfrObra2.ActivarModoModificar;
begin
dsObras.AutoEdit := True;
try
ActivarModoModificarTablasObra;
Visible := True;
except
on E : EIBError do
begin
case E.IBErrorCode of
isc_lock_conflict : begin
VerMensajeFmt(msgObrObrBloqueado, [CodigoObra]);
CancelarModificar;
CloseFrame;
Exit;
end
else
TratarExcepcion(E);
end;
end;
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrObra2.ActivarModoModificarTablasObra;
begin
with TablaObras do
begin
ParamByName('CODIGOCONTRATO').AsString := CodigoObra;
Prepare;
Open;
if RecordCount = 0 then
begin
VerMensajeFmt(msgObrNoExisteObr, [CodigoObra]);
CancelarModificar;
CloseFrame;
Exit;
end;
end;
end;
procedure TfrObra2.BuscarObra;
begin
if Transaccion = NIL then
exit;
try
if TablaObras.Active then
ModificarDatos;
TablaObras.Close;
TablaCitas.Close;
TablaObrasInstaladores.Close;
TablaObrasGastos.Close;
FTablaObrasGastosMem.Close;
TablaInstaladores.Close;
TablaDocumentos.Close;
// Buscar la fila a tratar si es necesario
if not esCadenaVacia(CodigoObra) then
begin
TablaObras.Params.ByName('CODIGOCONTRATO').AsString := CodigoObra;
TablaCitas.Params.ByName('CODIGOCONTRATO').AsString := CodigoObra;
TablaObrasInstaladores.Params.ByName('CODIGOCONTRATO').AsString := CodigoObra;
TablaObrasGastos.Params.ByName('CODIGOCONTRATO').AsString := CodigoObra;
TablaObras.Prepare;
TablaObras.Open;
TablaCitas.Prepare;
TablaCitas.Open;
TablaObrasInstaladores.Prepare;
TablaObrasInstaladores.Open;
TablaObrasGastos.Prepare;
TablaObrasGastos.Open;
FTablaObrasGastosMem.LoadFromDataSet(TablaObrasGastos, -1, lmCopy);
FTablaObrasGastosMem.Open;
TablaInstaladores.Open;
TablaDocumentos.Open;
cxSchedulerDBStorage.FullRefresh;
RellenarArrayBotones;
//Si la obra esta cerrada no se puede modificar ni fecha de finalizaci<63>n ni observaciones
if VarIsNull(TablaObras.FieldByName('FECHAFIN').AsVariant) then
HabilitarModificar
else
DeshabilitarModificar;
DatosCliente.Text := TablaObras.FieldByName('NOMBRE').AsString + #10 +
TablaObras.FieldByName('DIR1').AsString + #10 +
TablaObras.FieldByName('DIR2').AsString + #10 +
TablaObras.FieldByName('TELF').AsString;
end
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrObra2.CancelarEliminar: Boolean;
begin
end;
function TfrObra2.CancelarModificar: Boolean;
begin
Result := False;
try
RollBack;
TablaObras.Close;
TablaObrasInstaladores.Close;
TablaObrasGastos.Close;
FTablaObrasGastosMem.Close;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrObra2.CloseFrame: Boolean;
begin
ModificarDatos;
end;
function TfrObra2.ComprobarDatos: Boolean;
begin
end;
procedure TfrObra2.CrearTablasObra;
begin
TablaObras := TIBDataSet.Create(Self);
with TablaObras do
begin
Database := BaseDatos;
Transaction := Transaccion;
SelectSQL.Assign(dmTablaObras.sqlConsultar);
ModifySQL.Assign(dmTablaObras.sqlModificar);
DeleteSQL.Assign(dmTablaObras.sqlEliminar);
RefreshSQL.Assign(dmTablaObras.sqlConsultar);
end;
dsObras.DataSet := TablaObras;
TablaObrasInstaladores := TIBDataSet.Create(Self);
dsObrasInstaladores.DataSet := TablaObrasInstaladores;
with TablaObrasInstaladores do
begin
Database := BaseDatos;
Transaction := Transaccion;
SelectSQL.Assign(dmTablaObrasInstaladores.sqlGrid);
InsertSQL.Assign(dmTablaObrasInstaladores.sqlInsertar);
ModifySQL.Assign(dmTablaObrasInstaladores.sqlModificar);
DeleteSQL.Assign(dmTablaObrasInstaladores.sqlEliminar);
RefreshSQL.Assign(dmTablaObrasInstaladores.sqlConsultar);
end;
dmTablaObrasInstaladores.InicializarGrid(gridInstaladoresVista);
TablaObrasGastos := TIBDataSet.Create(Self);
FTablaObrasGastosMem := TRxMemoryData.Create(Self);
dsGastos.DataSet := FTablaObrasGastosMem;
with TablaObrasGastos do
begin
Database := BaseDatos;
Transaction := Transaccion;
SelectSQL.Assign(dmTablaObrasGastos.sqlGrid);
InsertSQL.Assign(dmTablaObrasGastos.sqlInsertar);
ModifySQL.Assign(dmTablaObrasGastos.sqlModificar);
DeleteSQL.Assign(dmTablaObrasGastos.sqlEliminar);
RefreshSQL.Assign(dmTablaObrasGastos.sqlConsultar);
end;
FTablaObrasGastosMem.CopyStructure(TablaObrasGastos);
FTablaObrasGastosMem.FieldByName('CODIGO').Required := False;
with TablaDocumentos do
begin
Database := BaseDatos;
Transaction := Transaccion;
end;
dmTablaObrasGastos.InicializarGrid(gridOtrosGastosVista);
end;
constructor TfrObra2.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Entidad := entObraCliente;
ConfigurarFrame(Self, Self.Entidad);
BaseDatos := dmBaseDatos.BD;
Transaccion := dmBaseDatos.Transaccion;
CrearTablasObra;
CrearTablaCitas;
InicializarCampos;
InicializarPantalla;
{CrearTablasPedidos;
CrearTablasTareas;
CrearInformes;}
FInformeEstadoObra := TdmInformeEstadoObra.Create(Self);
with FInformeEstadoObra do
begin
frxTablaCitas.DataSource := dsCitas;
frxTablaInstaladores.DataSource := dsObrasInstaladores;
frxTablaObras.DataSource := dsObras;
end;
Paginas.ActivePageIndex := 0;
end;
destructor TfrObra2.Destroy;
begin
FreeAndNIL(FInformeEstadoObra);
DestruirTablasObra;
DestruirTablaCitas;
{ destruirTablasPedidos;
destruirTablasTareas;
destruirInformes;}
inherited;
end;
procedure TfrObra2.DestruirTablasObra;
begin
TablaObras.Close;
TablaObras.Unprepare;
TablaObras.Free;
TablaObras := Nil;
TablaObrasInstaladores.Close;
TablaObrasInstaladores.UnPrepare;
TablaObrasInstaladores.Free;
TablaObrasInstaladores := Nil;
TablaObrasGastos.Close;
TablaObrasGastos.UnPrepare;
TablaObrasGastos.Free;
TablaObrasGastos := Nil;
FTablaObrasGastosMem.Close;
FTablaObrasGastosMem.Free;
FTablaObrasGastosMem := Nil;
end;
function TfrObra2.EliminarDatos: Boolean;
begin
Result := False;
try
cxSchedulerDBStorage.Clear;
TablaObras.Delete;
Commit;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrObra2.FreeContenido;
begin
if (ContenidoModal is TRdxFrameInstaladores) then
CodigoInstalador := (ContenidoModal as TRdxFrameInstaladores).CodigoInstalador;
inherited FreeContenido;
end;
function TfrObra2.ModificarDatos: Boolean;
begin
Result := False;
try
if (TablaObras.State in [dsEdit, dsInsert]) then
TablaObras.Post;
BorrarTabla(TablaObrasGastos);
SalvarDatosGastos;
SalvarProveedores;
Commit;
Result := True;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
function TfrObra2.TratarCambios: integer;
begin
end;
procedure TfrObra2.VerModal;
begin
inherited;
end;
procedure TfrObra2.CrearTablaCitas;
begin
dsCitas.DataSet := TablaCitas;
with TablaCitas do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SelectSQL.Assign(dmTablaCitas.sqlConsultar);
SelectSQL.Add('WHERE CITAS.CODIGOCONTRATO = :CODIGOCONTRATO');
InsertSQL.Assign(dmTablaCitas.sqlInsertar);
ModifySQL.Assign(dmTablaCitas.sqlModificar);
DeleteSQL.Assign(dmTablaCitas.sqlEliminar);
RefreshSQL.Assign(dmTablaCitas.sqlRefrescar);
RefreshSQL.Add(' AND CITAS.CODIGOCONTRATO = :CODIGOCONTRATO');
BeforePost := TablaCitasBeforePost;
AfterPost := TablaCitasAfterPost;
Prepare;
end;
dmTablaTareas.InicializarGridTareasObras(gridEntregasVista);
with TcxLookupComboBoxProperties(gridEntregasVista.GetColumnByFieldName('RESOURCEID').Properties) do
ListSource := dsInstaladores;
dmTablaTareas.InicializarGridTareasObras(gridMontajesVista);
with TcxLookupComboBoxProperties(gridMontajesVista.GetColumnByFieldName('RESOURCEID').Properties) do
ListSource := dsInstaladores;
dmTablaTareas.InicializarGridTareasObras(gridRematesVista);
with TcxLookupComboBoxProperties(gridRematesVista.GetColumnByFieldName('RESOURCEID').Properties) do
ListSource := dsInstaladores;
dsInstaladores.DataSet := TablaInstaladores;
with TablaInstaladores do
begin
Database := dmBaseDatos.BD;
Transaction := dmBaseDatos.Transaccion;
SelectSQL.Add('select * from INSTALADORES order by CODIGO');
Prepare;
end;
end;
procedure TfrObra2.DestruirTablaCitas;
begin
TablaCitas.Close;
//TablaInstaladores.Close;
end;
procedure TfrObra2.InicializarPantalla;
var
i : integer;
Inicio, Final : Integer;
begin
Inicio := Ord(tcPedido);
Final := Ord(tcEntregaCliente);
with JvItemsPanel1 do
begin
Items.Clear;
for i := Inicio to Final do
Items.Add(LiteralTipoCita[i]);
end;
JvArrayButton1.Rows := Final - Inicio + 1;
JvArrayButton1.Cols := 4;
for i := 1 to JvArrayButton1.Cols do
JvHeaderControl1.Sections[i].Text := LiteralPartidasObra[i-1];
JvArrayButton1.Colors.Clear;
for i := 0 to (JvArrayButton1.Cols * JvArrayButton1.Rows) do
JvArrayButton1.Colors.Append('$00F9FEFF');
AjustarCabeceras;
end;
procedure TfrObra2.JvArrayButton1ArrayButtonClicked(ACol, ARow: Integer);
var
i : integer;
AModified : Boolean;
ATipo : Cardinal;
ObraCerrada : boolean;
begin
ATipo := ARow + Ord(tcPedido);
ObraCerrada := not VarIsNull(TablaObras.FieldByName('FECHAFIN').AsVariant);
with TablaCitas do
begin
try
First;
if Locate('TIPOTAREA;PARTIDA',
VarArrayOf([TextoTipoCita[ATipo], TextoPartidasObra[ACol]]),
[loCaseInsensitive]) then
begin
EditarCita(FieldByName('ID').AsVariant, ObraCerrada);
end
else begin
//Si la obra esta cerrada y al cuadro no contiene informaci<63>n no se muestra nada
if not ObraCerrada then
begin
InsertarCitaFase(ATipo, ACol);
end;
end;
finally
SalvarProveedores;
RellenarArrayBotones;
end;
end;
end;
procedure TfrObra2.InicializarCampos;
var
aField : TcxSchedulerDBStorageField;
begin
inherited;
with cxSchedulerDBStorage.CustomFields do
begin
try
BeginUpdate;
Clear;
aField := Add;
aField.FieldName := 'TIPOTAREA';
aField := Add;
aField.FieldName := 'CODIGOCONTRATO';
aField := Add;
aField.FieldName := 'NOMBRECLIENTE';
aField := Add;
aField.FieldName := 'PARTIDA';
aField := Add;
aField.FieldName := 'COMPLETADA';
aField := Add;
aField.FieldName := 'NOMBREPROVEEDOR';
finally
EndUpdate;
end;
end;
end;
procedure TfrObra2.TablaCitasAfterPost(DataSet: TDataSet);
begin
dmBaseDatos.Transaccion.CommitRetaining;
/// RellenarArrayBotones;
end;
procedure TfrObra2.TablaCitasBeforePost(DataSet: TDataSet);
begin
if (DataSet.FieldByName('ID').AsVariant = -1) or
(VarIsNull(DataSet.FieldByName('ID').AsVariant)) then
begin
DataSet.Edit;
DataSet.FieldByName('ID').AsVariant := dmTablaCitas.DarNuevoCodigo;
end;
end;
procedure TfrObra2.RellenarArrayBotones;
var
I, ACol, ARow : integer;
ATipo, APartida : String;
AEvent : TcxSchedulerEvent;
AControlEvent : TcxSchedulerControlEvent;
ATipos : TStringList;
APartidas : TStringList;
ACaptions : TStringList;
AColors : TStringList;
ACompletada : Boolean;
AProveedor : String;
AFecIni, AFecFin : TDate;
begin
JvArrayButton1.Captions.Clear;
JvArrayButton1.Colors.Clear;
JvStringGrid1.Cells[0, 0] := 'Proveedores';
for i := 0 to JvArrayButton1.Cols - 1 do
JvStringGrid1.Cells[i + 1, 0] := '';
ATipos := TStringList.Create;
APartidas := TStringList.Create;
ACaptions := TStringList.Create;
AColors := TStringList.Create;
try
for i := Ord(tcPedido) to Ord(tcEntregaCliente) do
ATipos.Add(TextoTipoCita[i]);
for i := Ord(poCocina) to Ord(poVarios) do
APartidas.Add(TextoPartidasObra[i]);
for i := 0 to (JvArrayButton1.Rows * JvArrayButton1.Cols) - 1 do
ACaptions.Add('');
for i := 0 to (JvArrayButton1.Cols * JvArrayButton1.Rows) do
AColors.Add('$00F9FEFF');
with TablaCitas do
begin
DisableControls;
First;
while not EOF do
begin
ARow := ATipos.IndexOf(FieldByName('TIPOTAREA').AsString);
ACol := APartidas.IndexOf(FieldByName('PARTIDA').AsString);
ACompletada := not VarIsNull(FieldByName('COMPLETADA').AsVariant);
AProveedor := FieldByName('NOMBREPROVEEDOR').AsString;
if (ARow >= 0) and (ACol >= 0) then
begin
AFecIni := FieldByName('START').AsDateTime;
AFecFin := FieldByName('FINISH').AsDateTime;
if DateOf(AFecIni) <> DateOf(AFecFin) then
ACaptions[(ARow*JvArrayButton1.Cols)+ACol] := 'Del ' + DateToStr(AFecIni) + ' al ' + DateToStr(AFecFin)
else
ACaptions[(ARow*JvArrayButton1.Cols)+ACol] := DateToStr(AFecIni);
//ACaptions[(ARow*JvArrayButton1.Cols)+ACol] := FieldByName('CAPTION').AsString;
if ACompletada then
begin
AColors[(ARow*JvArrayButton1.Cols)+ACol] := ColorToString(dmConfiguracion.cxContentOdd.Color);
ACaptions[(ARow*JvArrayButton1.Cols)+ACol] := ACaptions[(ARow*JvArrayButton1.Cols)+ACol] + ' (Completada)'
end;
JvStringGrid1.Cells[ACol+1, 0] := AProveedor;
end;
Next;
end;
EnableControls;
end;
for i := 0 to (JvArrayButton1.Rows * JvArrayButton1.Cols) - 1 do
JvArrayButton1.Captions.Add(ACaptions.Strings[i]);
for i := 0 to (JvArrayButton1.Rows * JvArrayButton1.Cols) - 1 do
JvArrayButton1.Colors.Add(AColors.Strings[i]);
finally
FreeAndNil(ATipos);
FreeAndNil(APartidas);
FreeAndNil(ACaptions);
FreeAndNil(AColors);
JvArrayButton1.Invalidate;
end;
end;
procedure TfrObra2.JvItemsPanel1Resize(Sender: TObject);
begin
AjustarCabeceras;
end;
procedure TfrObra2.AjustarCabeceras;
var
i : integer;
Ancho : Integer;
begin
with JvHeaderControl1 do
begin
for i := 0 to (Sections.Count - 1) do
begin
if i = 0 then
Ancho := JvItemsPanel1.Width
else
Ancho := JvArrayButton1.Width div JvArrayButton1.Cols;
Sections[i].MaxWidth := Ancho;
Sections[i].MinWidth := Ancho;
Sections[i].Width := Ancho;
Panel1.Width := JvArrayButton1.Width;
JvStringGrid1.ColWidths[i] := Ancho;
end;
end;
end;
procedure TfrObra2.pagPedidosResize(Sender: TObject);
begin
AjustarCabeceras;
end;
procedure TfrObra2.actCancelarExecute(Sender: TObject);
begin
CancelarModificar;
end;
procedure TfrObra2.actAceptarExecute(Sender: TObject);
begin
ModificarDatos;
end;
procedure TfrObra2.SetCodigoInstalador(const Value: Variant);
var
DatosInstalador : TDatosInstalador;
begin
if (EsCadenaVacia(Value)) then
Exit;
FCodigoInstalador := Value;
if not TablaObrasInstaladores.Locate('CODIGOINSTALADOR', FCodigoInstalador,[]) then
begin
DatosInstalador := TDatosInstalador.Create;
DatosInstalador.Codigo := FCodigoInstalador;
dmTablaInstaladores.DarDatosInstalador(DatosInstalador);
with TablaObrasInstaladores do
begin
Append;
FieldByName('CODIGOCONTRATO').AsString := CodigoObra;
FieldByName('CODIGOINSTALADOR').AsString := FCodigoInstalador;
FieldByName('NOMBRE').AsString := DatosInstalador.Nombre;
FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha;
FieldByName('USUARIO').AsString := dmBaseDatos.Usuario;
Post;
gridInstaladores.Refresh;
end;
FreeAndNil(DatosInstalador);
end
else
verMensajeFmt(msgObrInsRepetido,[FCodigoInstalador]);
end;
procedure TfrObra2.actAnadirInstaladorExecute(Sender: TObject);
begin
ContenidoModal := TfrInstaladores.Create(Self);
gridInstaladores.SetFocus;
end;
procedure TfrObra2.actEliminarInstaladorExecute(Sender: TObject);
begin
if verMensajePregunta(msgObrEliminarDetalles) = mrYes then
begin
//Comprobamos si el instalador a eliminar tiene asociado alg<6C>n entrega, montaje o remate
if ExisteInstaladorEnOtrasTareas then
begin
VerMensaje(msgObrInsConOtrasTareas1);
Exit;
end;
if TablaObrasInstaladores.RecordCount = 0 then begin
{ Hacemos un cancel de la tabla por si el registro actual estuviera
recien creado }
TablaObrasInstaladores.Cancel;
Exit
end;
try
TablaObrasInstaladores.Delete;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
end;
procedure TfrObra2.actEliminarTodoInsExecute(Sender: TObject);
begin
if verMensajePregunta(msgObrEliminarTodosDetalles) = mrYes then
begin
with TablaObrasInstaladores do
begin
if IsEmpty then
Exit;
Last;
while not BOF do
begin
//Comprobamos si el instalador a eliminar tiene asociado alg<6C>n entrega, montaje o remate
if not ExisteInstaladorEnOtrasTareas then
Delete;
Prior;
end;
if not IsEmpty then
//Comprobamos si el instalador a eliminar tiene asociado alg<6C>n entrega, montaje o remate
if not ExisteInstaladorEnOtrasTareas then
Delete;
end;
if not TablaObrasInstaladores.IsEmpty then
VerMensaje(msgObrInsConOtrasTareas2);
end;
end;
procedure TfrObra2.actEliminarTodoGasExecute(Sender: TObject);
begin
if verMensajePregunta(msgObrEliminarTodosDetalles) = mrYes then
FTablaObrasGastosMem.EmptyTable;
end;
procedure TfrObra2.actEliminarGastoExecute(Sender: TObject);
begin
if verMensajePregunta(msgObrEliminarDetalles) = mrYes then
begin
if FTablaObrasGastosMem.RecordCount = 0 then begin
{ Hacemos un cancel de la tabla por si el registro actual estuviera
recien creado }
FTablaObrasGastosMem.Cancel;
Exit
end;
try
FTablaObrasGastosMem.Delete;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
end;
function TfrObra2.ExisteInstaladorEnOtrasTareas: Boolean;
begin
//
end;
procedure TfrObra2.actAnadirGastoExecute(Sender: TObject);
begin
try
with FTablaObrasGastosMem do
begin
Next;
if EOF then
Append
else begin
Prior;
Insert;
end;
FieldByName('CODIGOCONTRATO').AsString := CodigoObra;
FieldByName('CODIGO').AsInteger := RecNo;
FieldByName('FECHAALTA').AsDateTime := dmBaseDatos.DarFecha;
FieldByName('USUARIO').AsString := dmBaseDatos.Usuario;
FieldByName('FECHA').AsDateTime := DateOf(Now);
end;
gridOtrosGastos.SetFocus;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrObra2.SalvarDatosGastos;
var
NumeroCampo : Integer;
Valor : Variant;
Contador : Integer;
begin
try
with FTablaObrasGastosMem do
begin
if IsEmpty then
Exit;
DisableControls;
First;
TablaObrasGastos.First;
Contador := 0;
while not EOF do
begin
TablaObrasGastos.Insert;
for NumeroCampo := 0 to FieldCount-1 do
begin
Valor := Fields[NumeroCampo].AsVariant;
if (TablaObrasGastos.Fields[NumeroCampo].FieldName = 'CODIGO') then
Valor := Contador;
TablaObrasGastos.Fields[NumeroCampo].AsVariant := Valor;
end;
TablaObrasGastos.Post;
Inc(Contador);
Next;
end;
EnableControls;
end;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
procedure TfrObra2.SalvarProveedores;
var
I, ACol : integer;
APartida : String;
AEvent : TcxSchedulerEvent;
APartidas : TStringList;
AProveedor : String;
begin
APartidas := TStringList.Create;
try
for i := Ord(poCocina) to Ord(poVarios) do
APartidas.Add(TextoPartidasObra[i]);
with cxSchedulerDBStorage do
begin
FullRefresh;
for i := 0 to (EventCount - 1) do
begin
AEvent := Events[i];
APartida := VarToStr(AEvent.GetCustomFieldValueByName('PARTIDA'));
ACol := APartidas.IndexOf(APartida);
if (ACol >= 0) then
begin
AProveedor := JvStringGrid1.Cells[ACol+1, 0];
AEvent.SetCustomFieldValueByName('NOMBREPROVEEDOR', AProveedor);
end;
end;
end;
finally
FreeAndNil(APartidas);
end;
end;
procedure TfrObra2.AplicarFiltroTipoAGrid(aVista : TcxGridDBTableView; aTipo : TTipoCitas);
var
AItemList : TcxFilterCriteriaItemList;
begin
with aVista.DataController.Filter do
begin
BeginUpdate;
try
Root.Clear;
Root.BoolOperatorKind := fboAnd;
Root.AddItem(aVista.GetColumnByFieldName('TIPOTAREA'), foLike, TextoTipoCita[Ord(aTipo)], 'Tipo');
Root.AddItem(aVista.GetColumnByFieldName('CODIGOCONTRATO'), foLike, FCodigoObra, 'Obra');
Active := True;
finally
EndUpdate;
end;
end;
end;
procedure TfrObra2.pagEntregasShow(Sender: TObject);
begin
AplicarFiltroTipoAGrid(gridEntregasVista, tcEntrega);
end;
procedure TfrObra2.pagMontajesShow(Sender: TObject);
begin
AplicarFiltroTipoAGrid(gridMontajesVista, tcMontaje);
end;
procedure TfrObra2.pagRematesShow(Sender: TObject);
begin
AplicarFiltroTipoAGrid(gridRematesVista, tcRemate);
end;
procedure TfrObra2.actAnadirEntregaExecute(Sender: TObject);
var
AOpcion : Cardinal;
begin
if pagEntregas.Visible then
AOpcion := Ord(tcEntrega);
if pagMontajes.Visible then
AOpcion := Ord(tcMontaje);
if pagRemates.Visible then
AOpcion := Ord(tcRemate);
InsertarCitaEntrega(AOpcion);
end;
procedure TfrObra2.gridEntregasVistaDblClick(Sender: TObject);
begin
if gridEntregasVista.ViewData.RowCount > 0 then
begin
with TablaCitas do
begin
DisableControls;
EditarCita(FieldByName('ID').AsVariant, False);
gridEntregasVista.DataController.RefreshExternalData;
EnableControls;
end;
end;
end;
procedure TfrObra2.actEliminarEntregaExecute(Sender: TObject);
begin
if verMensajePregunta(msgObrEliminarDetalles) = mrYes then
begin
if TablaCitas.RecordCount = 0 then begin
{ Hacemos un cancel de la tabla por si el registro actual estuviera
recien creado }
TablaCitas.Cancel;
Exit
end;
try
TablaCitas.Delete;
except
on E : EIBError do
TratarExcepcion(E);
on E : Exception do
TratarExcepcion(E);
end;
end;
end;
procedure TfrObra2.actEliminarEntregaUpdate(Sender: TObject);
begin
if VarIsNull(TablaObras.FieldByName('FECHAFIN').AsVariant) then
(Sender as TAction).Enabled := (gridEntregasVista.Controller.SelectedRowCount > 0)
else
(Sender as TAction).Enabled := VarIsNull(TablaObras.FieldByName('FECHAFIN').AsVariant);
end;
procedure TfrObra2.actEliminarRemateUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := (gridRematesVista.Controller.SelectedRowCount > 0);
end;
procedure TfrObra2.actEliminarMontajeUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := (gridMontajesVista.Controller.SelectedRowCount > 0);
end;
procedure TfrObra2.actPrevisualizarExecute(Sender: TObject);
begin
Imprimir;
end;
procedure TfrObra2.Imprimir;
var
APartida : TPartidasObra;
ATipoCita : TTipoCitas;
Col, Row : Integer;
i : Integer;
Cadena : String;
begin
with FInformeEstadoObra do
begin
CodigoContrato := Self.FCodigoObra;
for APartida := poCocina to poVarios do
begin
Proveedores[APartida] := JvStringGrid1.Cells[Ord(APartida)+1, 0];
for ATipoCita := tcPedido to tcEntregaCliente do
begin
Col := Ord(APartida);
Row := Ord(ATipoCita) - Ord(tcPedido);
Cadena := JvArrayButton1.Captions[(Row*JvArrayButton1.Cols)+Col];
if JvArrayButton1.Colors[(Row*JvArrayButton1.Cols)+Col] = ColorToString(dmConfiguracion.cxContentOdd.Color) then
Cadena := '#' + Cadena;
EstadoObra[APartida, ATipoCita] := Cadena;
end;
end;
Imprimir;
end;
end;
procedure TfrObra2.EditarCita(ID: Variant; bSoloLectura: Boolean);
var
AEvent : TcxSchedulerEvent;
AControlEvent : TcxSchedulerControlEvent;
AModified : Boolean;
TareaFase: Boolean;
dsAux : TDataSource;
begin
AEvent := cxSchedulerDBStorage.GetEventByID(ID);
AControlEvent := TcxSchedulerControlEvent.Create(AEvent);
try
TareaFase := esCitaFase(AEvent.GetCustomFieldValueByName('TIPOTAREA'));
if TareaFase then
begin
dsAux := cxSchedulerDBStorage.Resources.DataSource;
cxSchedulerDBStorage.Resources.DataSource := NIL;
end;
if bSoloLectura then
cxShowEventEditor(AControlEvent, CodigoContrato.Style.LookAndFeel, False, AModified, True, False)
else
cxShowEventEditor(AControlEvent, CodigoContrato.Style.LookAndFeel, False, AModified);
if AModified then
begin
AEvent.Assign(AControlEvent);
end;
finally
if TareaFase then
cxSchedulerDBStorage.Resources.DataSource := dsAux;
AControlEvent.Free;
end;
end;
procedure TfrObra2.gridMontajesVistaDblClick(Sender: TObject);
begin
if gridMontajesVista.ViewData.RowCount > 0 then
begin
with TablaCitas do
begin
DisableControls;
EditarCita(FieldByName('ID').AsVariant, False);
gridMontajesVista.DataController.RefreshExternalData;
EnableControls;
end;
end;
end;
procedure TfrObra2.gridRematesVistaDblClick(Sender: TObject);
begin
if gridRematesVista.ViewData.RowCount > 0 then
begin
with TablaCitas do
begin
DisableControls;
EditarCita(FieldByName('ID').AsVariant, False);
gridRematesVista.DataController.RefreshExternalData;
EnableControls;
end;
end;
end;
{procedure TfrObra2.EditarCita(AEvent : TcxSchedulerEvent);
var
AControlEvent : TcxSchedulerControlEvent;
AModified : Boolean;
begin
AControlEvent := TcxSchedulerControlEvent.Create(AEvent);
try
cxShowEventEditor(AControlEvent, CodigoContrato.Style.LookAndFeel,
False, AModified);
if AModified then
begin
AEvent.Assign(AControlEvent);
AEvent.Post;
end;
finally
AControlEvent.Free;
end;
end;
}
procedure TfrObra2.cxSchedulerDBStorageEventModified(Sender: TObject;
AEvent: TcxSchedulerEvent; var AHandled: Boolean);
begin
// ShowMessage('Cambios');
end;
procedure TfrObra2.DeshabilitarModificar;
begin
// FechaFin.Properties.ReadOnly := True;
lblObraCerrada.Visible := True;
Observaciones.Properties.ReadOnly := True;
dsObrasInstaladores.Enabled := False;
dsGastos.Enabled := False;
JvStringGrid1.Enabled := False;
end;
procedure TfrObra2.HabilitarModificar;
begin
// FechaFin.Properties.ReadOnly := False;
lblObraCerrada.Visible := False;
Observaciones.Properties.ReadOnly := False;
dsObrasInstaladores.Enabled := True;
dsGastos.Enabled := True;
JvStringGrid1.Enabled := True;
end;
procedure TfrObra2.actAnadirInstaladorUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := dsObrasInstaladores.Enabled;
end;
procedure TfrObra2.actEliminarInstaladorUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := dsObrasInstaladores.Enabled;
end;
procedure TfrObra2.actEliminarTodoInsUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := dsObrasInstaladores.Enabled;
end;
procedure TfrObra2.actAnadirGastoUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := dsGastos.Enabled;
end;
procedure TfrObra2.actEliminarGastoUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := dsGastos.Enabled;
end;
procedure TfrObra2.actEliminarTodoGasUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := dsGastos.Enabled;
end;
procedure TfrObra2.actAnadirEntregaUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := VarIsNull(TablaObras.FieldByName('FECHAFIN').AsVariant);
end;
procedure TfrObra2.InsertarCitaEntrega(const Opcion: Integer);
var
AControlEvent : TcxSchedulerControlEvent;
AModified : Boolean;
begin
AControlEvent := TcxSchedulerControlEvent.Create(cxSchedulerDBStorage);
with AControlEvent do
begin
BeginEditing;
Start := Now;
Finish := IncHour(Now);
SetCustomFieldValueByName('TIPOTAREA', TextoTipoCita[Opcion]);
SetCustomFieldValueByName('CODIGOCONTRATO', CodigoObra);
EndEditing;
end;
try
cxSchedulerDBStorage.Resources.DataSource := dsInstaladores;
cxShowEventEditor(AControlEvent, CodigoContrato.Style.LookAndFeel,
False, AModified);
if AModified then
AControlEvent.Post;
finally
AControlEvent.Free;
end;
end;
procedure TfrObra2.InsertarCitaFase(Const Tipo:Integer; Const Col: Integer);
var
AControlEvent : TcxSchedulerControlEvent;
AModified : Boolean;
dsAux : TDataSource;
begin
AControlEvent := TcxSchedulerControlEvent.Create(cxSchedulerDBStorage);
with AControlEvent do
begin
BeginEditing;
Start := Now;
Finish := IncHour(Now);
Caption := LiteralPartidasObra[Col] + ' - ' + LiteralTipoCita[Tipo];
SetCustomFieldValueByName('TIPOTAREA', TextoTipoCita[Tipo]);
SetCustomFieldValueByName('PARTIDA', TextoPartidasObra[Col]);
SetCustomFieldValueByName('CODIGOCONTRATO', CodigoObra);
EndEditing;
end;
try
dsAux := cxSchedulerDBStorage.Resources.DataSource;
cxSchedulerDBStorage.Resources.DataSource := NIL;
cxShowEventEditor(AControlEvent, CodigoContrato.Style.LookAndFeel, False, AModified);
if AModified then
AControlEvent.Post;
finally
cxSchedulerDBStorage.Resources.DataSource := dsAux;
AControlEvent.Free;
end;
end;
procedure TfrObra2.JvStringGrid1ExitCell(Sender: TJvStringGrid; AColumn,
ARow: Integer; const EditText: String);
var
Col : Integer;
Row : integer;
ConTexto : Boolean;
begin
if (JvArrayButton1.Captions.Count <> 0) then
begin
ConTexto := False;
Col := AColumn - 1;
for Row := 0 to (Ord(tcEntregaCliente) - Ord(tcPedido)) do
ConTexto := ConTexto or not EsCadenaVacia(JvArrayButton1.Captions[(Row*JvArrayButton1.Cols)+Col]);
if not ConTexto then
begin
Sender.Cells[AColumn, 0] := 'Antes debe hacer un pedido';
end;
end;
end;
procedure TfrObra2.VistaPrevia;
var
APartida : TPartidasObra;
ATipoCita : TTipoCitas;
Col, Row : Integer;
i : Integer;
Cadena : String;
begin
with FInformeEstadoObra do
begin
CodigoContrato := Self.FCodigoObra;
for APartida := poCocina to poVarios do
begin
Proveedores[APartida] := JvStringGrid1.Cells[Ord(APartida)+1, 0];
for ATipoCita := tcPedido to tcEntregaCliente do
begin
Col := Ord(APartida);
Row := Ord(ATipoCita) - Ord(tcPedido);
Cadena := JvArrayButton1.Captions[(Row*JvArrayButton1.Cols)+Col];
if JvArrayButton1.Colors[(Row*JvArrayButton1.Cols)+Col] = ColorToString(dmConfiguracion.cxContentOdd.Color) then
Cadena := '#' + Cadena;
EstadoObra[APartida, ATipoCita] := Cadena;
end;
end;
Previsualizar;
end;
end;
end.