461 lines
12 KiB
ObjectPascal
461 lines
12 KiB
ObjectPascal
|
|
unit EditorEventos;
|
|||
|
|
|
|||
|
|
interface
|
|||
|
|
|
|||
|
|
uses
|
|||
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|||
|
|
Dialogs, cxSchedulerEventEditor, cxLookAndFeelPainters, cxMemo,
|
|||
|
|
cxDropDownEdit, cxCheckBox, cxSpinEdit, cxTimeEdit, cxCalendar, ExtCtrls,
|
|||
|
|
cxMaskEdit, cxImageComboBox, cxControls, cxContainer, cxEdit, cxTextEdit,
|
|||
|
|
StdCtrls, cxButtons, cxSchedulerStorage, TablaCitas, Menus, cxGraphics,
|
|||
|
|
cxCheckComboBox, cxGroupBox;
|
|||
|
|
|
|||
|
|
type
|
|||
|
|
TfrEditorEventos = class(TcxSchedulerEventEditorForm)
|
|||
|
|
pnlObra: TPanel;
|
|||
|
|
lbObra: TLabel;
|
|||
|
|
cbObra: TcxComboBox;
|
|||
|
|
lbTipo: TLabel;
|
|||
|
|
cbTipo: TcxComboBox;
|
|||
|
|
teCodigoContrato: TEdit;
|
|||
|
|
teNombreCliente: TEdit;
|
|||
|
|
lbPartida: TLabel;
|
|||
|
|
cbPartida: TcxComboBox;
|
|||
|
|
pnlCompletada: TPanel;
|
|||
|
|
Bevel8: TBevel;
|
|||
|
|
cbCompletada: TcxCheckBox;
|
|||
|
|
deFechaCompletada: TcxDateEdit;
|
|||
|
|
Bevel9: TBevel;
|
|||
|
|
cbInstaladores: TcxComboBox;
|
|||
|
|
Bevel10: TBevel;
|
|||
|
|
cbMedicion: TcxCheckBox;
|
|||
|
|
procedure cbObraPropertiesEditValueChanged(Sender: TObject);
|
|||
|
|
procedure cbTipoPropertiesEditValueChanged(Sender: TObject);
|
|||
|
|
procedure cbTerminadoPropertiesChange(Sender: TObject);
|
|||
|
|
procedure deFechaCompletadaPropertiesChange(Sender: TObject);
|
|||
|
|
private
|
|||
|
|
FTipoEvento : TTipoCitas;
|
|||
|
|
procedure CargarObras;
|
|||
|
|
procedure CargarTipos;
|
|||
|
|
procedure CargarPartidas;
|
|||
|
|
procedure ApplyChanges;
|
|||
|
|
protected
|
|||
|
|
procedure DeleteEvent; override;
|
|||
|
|
procedure PostEvent; override;
|
|||
|
|
procedure SaveChanges; override;
|
|||
|
|
function GetFormColor: TColor; override;
|
|||
|
|
function GetResourcesPanelVisible: Boolean; override;
|
|||
|
|
procedure InitializeControls; override;
|
|||
|
|
procedure LoadEventValuesIntoControls; override;
|
|||
|
|
function IsValid: Boolean; override;
|
|||
|
|
procedure SetCaptions; override;
|
|||
|
|
procedure SetReadOnly(AValue: Boolean); override;
|
|||
|
|
procedure UpdateEventValuesFromControls; override;
|
|||
|
|
procedure SaveResourceID; override;
|
|||
|
|
public
|
|||
|
|
constructor CreateEx(AEvent: TcxSchedulerControlEvent); override;
|
|||
|
|
constructor Create(AOwner: TComponent); override;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
var
|
|||
|
|
frEditorEventos: TfrEditorEventos;
|
|||
|
|
|
|||
|
|
implementation
|
|||
|
|
|
|||
|
|
{$R *.dfm}
|
|||
|
|
|
|||
|
|
uses
|
|||
|
|
cxSchedulerDialogs, Configuracion, StrFunc, cxSchedulerUtils, TablaObras,
|
|||
|
|
DateUtils, Mensajes;
|
|||
|
|
|
|||
|
|
{ TfrEditorEventos }
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.ApplyChanges;
|
|||
|
|
begin
|
|||
|
|
inherited;
|
|||
|
|
//
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.CargarObras;
|
|||
|
|
var
|
|||
|
|
I, J, AResourceIndex: Integer;
|
|||
|
|
FListaObras : TListaObras;
|
|||
|
|
FListaObrasAux : TListaObras;
|
|||
|
|
begin
|
|||
|
|
I := 0;
|
|||
|
|
AResourceIndex := -1;
|
|||
|
|
|
|||
|
|
FListaObras := TListaObras.Create(tsoAbiertas);
|
|||
|
|
try
|
|||
|
|
with cbObra.Properties.Items do
|
|||
|
|
begin
|
|||
|
|
BeginUpdate;
|
|||
|
|
Clear;
|
|||
|
|
Add(''); // Un item vacio.
|
|||
|
|
for I := 0 to FListaObras.Count - 1 do
|
|||
|
|
begin
|
|||
|
|
Add(FListaObras.Obras[I].CodigoContrato + ' ' + FListaObras.Obras[I].Nombre);
|
|||
|
|
if VarToStr(Event.GetCustomFieldValueByName('CODIGOCONTRATO')) = FListaObras.Obras[I].CodigoContrato then
|
|||
|
|
AResourceIndex := I+1;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
//En el caso de ser pertenecer a una obra cerrada la cita que se presenta en modal
|
|||
|
|
if AResourceIndex = -1 then
|
|||
|
|
begin
|
|||
|
|
FListaObrasAux := TListaObras.Create(tsoCerradas);
|
|||
|
|
for J := 0 to FListaObrasAux.Count - 1 do
|
|||
|
|
begin
|
|||
|
|
Add(FListaObrasAux.Obras[J].CodigoContrato + ' ' + FListaObrasAux.Obras[J].Nombre);
|
|||
|
|
if VarToStr(Event.GetCustomFieldValueByName('CODIGOCONTRATO')) = FListaObrasAux.Obras[J].CodigoContrato then
|
|||
|
|
AResourceIndex := J+I+1;
|
|||
|
|
end;
|
|||
|
|
FreeAndNil(FListaObrasAux);
|
|||
|
|
end;
|
|||
|
|
cbObra.ItemIndex := AResourceIndex;
|
|||
|
|
EndUpdate;
|
|||
|
|
end;
|
|||
|
|
finally
|
|||
|
|
cbObra.Properties.Items.EndUpdate;
|
|||
|
|
FreeAndNil(FListaObras);
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.CargarTipos;
|
|||
|
|
var
|
|||
|
|
I : Integer;
|
|||
|
|
Inicio, Final : Integer;
|
|||
|
|
begin
|
|||
|
|
I := 0;
|
|||
|
|
|
|||
|
|
if (FTipoEvento in [tcRemate, tcEntrega, tcMontaje]) then
|
|||
|
|
begin
|
|||
|
|
Inicio := Ord(tcEntrega);
|
|||
|
|
Final := Ord(tcRemate);
|
|||
|
|
end
|
|||
|
|
else begin
|
|||
|
|
if FTipoEvento in [tcPedido, tcConfirmacion, tcRecepcion, tcAviso, tcEntregaCliente] then
|
|||
|
|
begin
|
|||
|
|
Inicio := Ord(tcPedido);
|
|||
|
|
Final := Ord(tcEntregaCliente);
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
with cbTipo.Properties do
|
|||
|
|
begin
|
|||
|
|
BeginUpdate;
|
|||
|
|
Items.Clear;
|
|||
|
|
|
|||
|
|
for i := Inicio to Final do
|
|||
|
|
begin
|
|||
|
|
Items.Add(LiteralTipoCita[i]);
|
|||
|
|
if VarToStr(Event.GetCustomFieldValueByName('TIPOTAREA')) = TextoTipoCita[i] then
|
|||
|
|
begin
|
|||
|
|
cbTipo.ItemIndex := I;
|
|||
|
|
cbTipo.EditValue := LiteralTipoCita[i];
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
EndUpdate;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
constructor TfrEditorEventos.Create(AOwner: TComponent);
|
|||
|
|
begin
|
|||
|
|
inherited;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
constructor TfrEditorEventos.CreateEx(AEvent: TcxSchedulerControlEvent);
|
|||
|
|
begin
|
|||
|
|
inherited;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TfrEditorEventos.GetFormColor: TColor;
|
|||
|
|
begin
|
|||
|
|
Result := $00F9FEFF;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.InitializeControls;
|
|||
|
|
begin
|
|||
|
|
if not VarIsNull(Event.GetCustomFieldValueByName('TIPOTAREA')) then
|
|||
|
|
FTipoEvento := DarTipoCita(Event.GetCustomFieldValueByName('TIPOTAREA'))
|
|||
|
|
else
|
|||
|
|
FTipoEvento := tcPersonal;
|
|||
|
|
|
|||
|
|
inherited;
|
|||
|
|
|
|||
|
|
pnlMessage.Visible := True;
|
|||
|
|
pnlCaption.Visible := True;
|
|||
|
|
|
|||
|
|
if not (FTipoEvento in [tcPersonal, tcMedicion]) then
|
|||
|
|
begin
|
|||
|
|
lbPartida.Visible := True;
|
|||
|
|
pnlObra.Visible := True;
|
|||
|
|
CargarObras;
|
|||
|
|
CargarTipos;
|
|||
|
|
if FTipoEvento in [tcPedido, tcConfirmacion, tcRecepcion, tcAviso, tcEntregaCliente] then
|
|||
|
|
begin
|
|||
|
|
lbPartida.Visible := True;
|
|||
|
|
cbPartida.Visible := True;
|
|||
|
|
CargarPartidas;
|
|||
|
|
pnlCompletada.Visible := True;
|
|||
|
|
end
|
|||
|
|
else begin
|
|||
|
|
lbPartida.Visible := False;
|
|||
|
|
cbPartida.Visible := False;
|
|||
|
|
end;
|
|||
|
|
end
|
|||
|
|
else begin
|
|||
|
|
pnlObra.Visible := False;
|
|||
|
|
cbMedicion.Visible := (FTipoEvento = tcMedicion)
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TfrEditorEventos.IsValid: Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := inherited IsValid;
|
|||
|
|
|
|||
|
|
if Result then
|
|||
|
|
begin
|
|||
|
|
{ if EsCadenaVacia(teSubject.Text) then
|
|||
|
|
begin
|
|||
|
|
VerMensaje('Indique el asunto');
|
|||
|
|
Result := False;
|
|||
|
|
end;}
|
|||
|
|
|
|||
|
|
if (FTipoEvento in [tcEntrega, tcMontaje, tcRemate]) then
|
|||
|
|
begin
|
|||
|
|
if EsCadenaVacia(cbInstaladores.EditValue) then
|
|||
|
|
begin
|
|||
|
|
VerMensaje('Hay que indicar el instalador');
|
|||
|
|
Result := False;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.LoadEventValuesIntoControls;
|
|||
|
|
var
|
|||
|
|
I, AResourceIndex: Integer;
|
|||
|
|
begin
|
|||
|
|
inherited LoadEventValuesIntoControls;
|
|||
|
|
|
|||
|
|
if icbLabel.ItemIndex = 6 then
|
|||
|
|
cbMedicion.Checked := True;
|
|||
|
|
|
|||
|
|
{ if not EsCadenaVacia(Event.GetCustomFieldValueByName('TIPOTAREA')) then
|
|||
|
|
cbTipo.EditValue := Event.GetCustomFieldValueByName('TIPOTAREA');}
|
|||
|
|
|
|||
|
|
if not (FTipoEvento in [tcPersonal, tcMedicion]) then
|
|||
|
|
begin
|
|||
|
|
if not EsCadenaVacia(Event.GetCustomFieldValueByName('CODIGOCONTRATO')) then
|
|||
|
|
teCodigoContrato.Text := Event.GetCustomFieldValueByName('CODIGOCONTRATO');
|
|||
|
|
if not EsCadenaVacia(Event.GetCustomFieldValueByName('NOMBRECLIENTE')) then
|
|||
|
|
teNombreCliente.Text := Event.GetCustomFieldValueByName('NOMBRECLIENTE');
|
|||
|
|
|
|||
|
|
if not VarIsNull(Event.GetCustomFieldValueByName('COMPLETADA')) then
|
|||
|
|
begin
|
|||
|
|
cbCompletada.Checked := True;
|
|||
|
|
deFechaCompletada.Date := DateOf(VarToDateTime(Event.GetCustomFieldValueByName('COMPLETADA')));
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
AResourceIndex := -1;
|
|||
|
|
with cbInstaladores do
|
|||
|
|
begin
|
|||
|
|
Properties.Items.BeginUpdate;
|
|||
|
|
try
|
|||
|
|
Properties.Items.Clear;
|
|||
|
|
for i := 0 to cbResources.Properties.Items.Count - 1 do
|
|||
|
|
begin
|
|||
|
|
Properties.Items.Add(cbResources.Properties.Items[i].Description);
|
|||
|
|
if cbResources.States[I] = cbsChecked then
|
|||
|
|
AResourceIndex := i;
|
|||
|
|
end;
|
|||
|
|
finally
|
|||
|
|
Properties.Items.EndUpdate;
|
|||
|
|
end;
|
|||
|
|
ItemIndex := AResourceIndex;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.SetCaptions;
|
|||
|
|
begin
|
|||
|
|
inherited SetCaptions;
|
|||
|
|
|
|||
|
|
case FTipoEvento of
|
|||
|
|
tcEntrega,
|
|||
|
|
tcMontaje,
|
|||
|
|
tcRemate : lbResource.Caption := 'Instalador:';
|
|||
|
|
|
|||
|
|
tcMedicion: lbResource.Caption := 'Vendedor:';
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
lbSubject.Caption := 'Asunto:';
|
|||
|
|
lbStartTime.Caption := 'Comienzo:';
|
|||
|
|
lbEndTime.Caption := 'Final:';
|
|||
|
|
cbAllDayEvent.Caption := 'Todo el d<>a';
|
|||
|
|
btnOk.Caption := 'Aceptar';
|
|||
|
|
btnDelete.Caption := 'Eliminar';
|
|||
|
|
btnCancel.Caption := 'Cancelar';
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.SetReadOnly(AValue: Boolean);
|
|||
|
|
begin
|
|||
|
|
inherited;
|
|||
|
|
if AValue then
|
|||
|
|
begin
|
|||
|
|
cbObra.Enabled:= False;
|
|||
|
|
cbPartida.Enabled:= False;
|
|||
|
|
cbTipo.Enabled:= False;
|
|||
|
|
deFechaCompletada.Enabled:= False;
|
|||
|
|
cbCompletada.Enabled:= False;
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
begin
|
|||
|
|
cbObra.Enabled:= True;
|
|||
|
|
cbPartida.Enabled:= True;
|
|||
|
|
cbTipo.Enabled:= True;
|
|||
|
|
deFechaCompletada.Enabled:= True;
|
|||
|
|
cbCompletada.Enabled:= True;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.UpdateEventValuesFromControls;
|
|||
|
|
begin
|
|||
|
|
inherited UpdateEventValuesFromControls;
|
|||
|
|
if pnlResource.Visible then
|
|||
|
|
SaveResourceID;
|
|||
|
|
|
|||
|
|
try
|
|||
|
|
// post the data from the custom editing controls
|
|||
|
|
|
|||
|
|
if not VarIsNull(teCodigoContrato.Text) then
|
|||
|
|
Event.SetCustomFieldValueByName('CODIGOCONTRATO', teCodigoContrato.Text);
|
|||
|
|
|
|||
|
|
if not VarIsNull(teNombreCliente.Text) then
|
|||
|
|
Event.SetCustomFieldValueByName('NOMBRECLIENTE', teNombreCliente.Text);
|
|||
|
|
|
|||
|
|
if not VarIsNull(cbPartida.EditValue) then
|
|||
|
|
Event.SetCustomFieldValueByName('PARTIDA', TextoPartidasObra[cbPartida.ItemIndex]);
|
|||
|
|
|
|||
|
|
if not VarIsNull(deFechaCompletada.EditValue) then
|
|||
|
|
Event.SetCustomFieldValueByName('COMPLETADA', deFechaCompletada.Date)
|
|||
|
|
else
|
|||
|
|
Event.SetCustomFieldValueByName('COMPLETADA', Null);
|
|||
|
|
|
|||
|
|
if not VarIsNull(cbTipo.EditValue) then
|
|||
|
|
begin
|
|||
|
|
FTipoEvento := DarTipoCita(cbTipo.EditValue);
|
|||
|
|
Event.SetCustomFieldValueByName('TIPOTAREA', TextoTipoCita[Ord(FTipoEvento)]);
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
FTipoEvento := tcPersonal;
|
|||
|
|
|
|||
|
|
if cbMedicion.Checked then
|
|||
|
|
Event.LabelColor := EventLabelColors[6]
|
|||
|
|
else
|
|||
|
|
Event.LabelColor := EventLabelColors[Ord(FTipoEvento) + 1];
|
|||
|
|
except
|
|||
|
|
on E: Exception do
|
|||
|
|
ShowMessage('Can''t post data' + #13#10 + E.Message);
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.cbObraPropertiesEditValueChanged(
|
|||
|
|
Sender: TObject);
|
|||
|
|
begin
|
|||
|
|
inherited OnChanged(Sender);
|
|||
|
|
if not EsCadenaVacia(cbObra.EditValue) then
|
|||
|
|
begin
|
|||
|
|
teCodigoContrato.Text := Copy(cbObra.EditValue, 0, Pos(' ', cbObra.EditValue)-1);
|
|||
|
|
teNombreCliente.Text := Copy(cbObra.EditValue, Pos(' ', cbObra.EditValue)+1, MaxInt);
|
|||
|
|
end
|
|||
|
|
else begin
|
|||
|
|
teCodigoContrato.Text := '';
|
|||
|
|
teNombreCliente.Text := '';
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.cbTipoPropertiesEditValueChanged(
|
|||
|
|
Sender: TObject);
|
|||
|
|
begin
|
|||
|
|
inherited OnChanged(Sender);
|
|||
|
|
icbLabel.ItemIndex := cbTipo.ItemIndex + 1;
|
|||
|
|
icbLabel.EditModified := True;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.CargarPartidas;
|
|||
|
|
var
|
|||
|
|
Inicio, Final : Integer;
|
|||
|
|
I : Integer;
|
|||
|
|
begin
|
|||
|
|
Inicio := Ord(tcPedido);
|
|||
|
|
Final := Ord(tcEntregaCliente);
|
|||
|
|
|
|||
|
|
with cbPartida.Properties.Items do
|
|||
|
|
begin
|
|||
|
|
BeginUpdate;
|
|||
|
|
Clear;
|
|||
|
|
for I := 0 to (Final - Inicio - 1) do
|
|||
|
|
begin
|
|||
|
|
Add(LiteralPartidasObra[i]);
|
|||
|
|
if VarToStr(Event.GetCustomFieldValueByName('PARTIDA')) = TextoPartidasObra[i] then
|
|||
|
|
cbPartida.ItemIndex := I;
|
|||
|
|
end;
|
|||
|
|
EndUpdate;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.cbTerminadoPropertiesChange(Sender: TObject);
|
|||
|
|
begin
|
|||
|
|
deFechaCompletada.Enabled := cbCompletada.Checked;
|
|||
|
|
if not cbCompletada.Checked then
|
|||
|
|
deFechaCompletada.Clear
|
|||
|
|
else
|
|||
|
|
if EsCadenaVacia(deFechaCompletada.EditValue) then
|
|||
|
|
deFechaCompletada.Date := DateOf(Now);
|
|||
|
|
|
|||
|
|
FModified := True;
|
|||
|
|
CheckVisible;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.deFechaCompletadaPropertiesChange(
|
|||
|
|
Sender: TObject);
|
|||
|
|
begin
|
|||
|
|
FModified := True;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.DeleteEvent;
|
|||
|
|
begin
|
|||
|
|
inherited;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.PostEvent;
|
|||
|
|
begin
|
|||
|
|
inherited;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.SaveChanges;
|
|||
|
|
begin
|
|||
|
|
inherited;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TfrEditorEventos.GetResourcesPanelVisible: Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := not (FTipoEvento in [tcPedido, tcConfirmacion, tcRecepcion, tcAviso, tcEntregaCliente]);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TfrEditorEventos.SaveResourceID;
|
|||
|
|
var
|
|||
|
|
I: Integer;
|
|||
|
|
begin
|
|||
|
|
for I := 0 to cbResources.Properties.Items.Count - 1 do
|
|||
|
|
cbResources.States[I] := cbsUnchecked;
|
|||
|
|
cbResources.States[cbInstaladores.ItemIndex] := cbsChecked;
|
|||
|
|
inherited;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
initialization
|
|||
|
|
cxEventEditorClass := TfrEditorEventos; // indicate that the new Event modal dialog will be invoked at runtime
|
|||
|
|
|
|||
|
|
end.
|