git-svn-id: https://192.168.0.254/svn/Proyectos.EstudioCarnicero_ProGestion/trunk@4 1b8572a8-2d6b-b84e-8c90-20ed86fa4eca
353 lines
10 KiB
ObjectPascal
353 lines
10 KiB
ObjectPascal
{
|
|
===============================================================================
|
|
Copyright (©) 2006. 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: 22-05-2006
|
|
Versión actual: 1.0.0
|
|
Fecha versión actual: 22-05-2006
|
|
===============================================================================
|
|
Modificaciones:
|
|
|
|
Fecha Comentarios
|
|
---------------------------------------------------------------------------
|
|
===============================================================================
|
|
}
|
|
|
|
unit uViewContactos;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, uViewGrid, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
|
|
cxDataStorage, cxEdit, DB, cxDBData, dxPSGlbl, dxPSUtl, dxPSEngn,
|
|
dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns,
|
|
dxPSEdgePatterns, dxPSCore, dxPScxCommon, dxPScxGridLnk, ActnList,
|
|
uDADataTable, cxGridLevel, cxClasses, cxControls, cxGridCustomView,
|
|
cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid,
|
|
uDAScriptingProvider, uDACDSDataTable, uBizContacto, StdCtrls, ImgList,
|
|
PngImageList;
|
|
|
|
type
|
|
TViewType = (vtAll, vtCat);
|
|
|
|
IViewContactos = interface(IViewGrid)
|
|
['{5FCFD172-5F8A-4639-B479-1CF0061526B5}']
|
|
function GetContactos: IBizContacto;
|
|
procedure SetContactos(const Value: IBizContacto);
|
|
property Contactos: IBizContacto read GetContactos write SetContactos;
|
|
function GetViewType: TViewType;
|
|
procedure SetViewType(const Value: TViewType);
|
|
end;
|
|
|
|
TfrViewContactos = class(TfrViewGrid, IViewContactos)
|
|
FContactosMem: TDACDSDataTable;
|
|
cxGridViewRecID: TcxGridDBColumn;
|
|
cxGridViewCODIGOEMPRESA: TcxGridDBColumn;
|
|
cxGridViewCODIGO: TcxGridDBColumn;
|
|
cxGridViewFECHAALTA: TcxGridDBColumn;
|
|
cxGridViewUSUARIO: TcxGridDBColumn;
|
|
cxGridViewNIFCIF: TcxGridDBColumn;
|
|
cxGridViewNOMBRE: TcxGridDBColumn;
|
|
cxGridViewCALLE: TcxGridDBColumn;
|
|
cxGridViewPROVINCIA: TcxGridDBColumn;
|
|
cxGridViewCODIGOPOSTAL: TcxGridDBColumn;
|
|
cxGridViewPOBLACION: TcxGridDBColumn;
|
|
cxGridViewTELEFONO1: TcxGridDBColumn;
|
|
cxGridViewTELEFONO2: TcxGridDBColumn;
|
|
cxGridViewMOVIL: TcxGridDBColumn;
|
|
cxGridViewFAX: TcxGridDBColumn;
|
|
cxGridViewCORREO1: TcxGridDBColumn;
|
|
cxGridViewCORREO2: TcxGridDBColumn;
|
|
cxGridViewPAGINAWEB: TcxGridDBColumn;
|
|
cxGridViewPUESTO: TcxGridDBColumn;
|
|
cxGridViewTRABAJO: TcxGridDBColumn;
|
|
cxGridViewLISTACATEGORIAS: TcxGridDBColumn;
|
|
cxGridViewCATEGORIAS: TcxGridDBColumn;
|
|
actVistaTodos: TAction;
|
|
actVistaCategorias: TAction;
|
|
PngImageList: TPngImageList;
|
|
procedure actVistaTodosExecute(Sender: TObject);
|
|
procedure actVistaCategoriasExecute(Sender: TObject);
|
|
procedure cxGridViewCODIGOCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
|
|
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
|
|
private
|
|
FViewType: TViewType;
|
|
procedure deshabilitarVistaCategorias;
|
|
procedure habilitarVistaCategorias;
|
|
procedure darListaCategorias(const Cadena: String; var Lista: TStringList);
|
|
procedure rellenarContactosMem;
|
|
protected
|
|
FContactos: IBizContacto;
|
|
function GetContactos: IBizContacto; virtual;
|
|
procedure SetContactos(const Value: IBizContacto); virtual;
|
|
function GetViewType: TViewType;
|
|
procedure SetViewType(const Value: TViewType);
|
|
public
|
|
property DataSet: IBizContacto read GetContactos write SetContactos;
|
|
property ViewType: TViewType read GetViewType write SetViewType;
|
|
|
|
procedure SyncFocusedRecordsFromDataSet; override;
|
|
procedure SyncFocusedRecordsGrid;
|
|
procedure SyncFocusedRecordsFromGrid; override;
|
|
procedure RefreshGrid; override;
|
|
|
|
procedure Preview; override;
|
|
procedure Print; override;
|
|
end;
|
|
|
|
var
|
|
frViewContactos: TfrViewContactos;
|
|
|
|
implementation
|
|
{$R *.dfm}
|
|
{ TfrViewContactos }
|
|
|
|
uses uDataModuleContactos, uDataTableUtils, uDAInterfaces,
|
|
uDBSelectionList, uUtils, schContactosClient_Intf;
|
|
|
|
|
|
procedure TfrViewContactos.actVistaCategoriasExecute(Sender: TObject);
|
|
begin
|
|
cxGridViewCATEGORIAS.GroupIndex := 0;
|
|
rellenarContactosMem;
|
|
end;
|
|
|
|
procedure TfrViewContactos.actVistaTodosExecute(Sender: TObject);
|
|
begin
|
|
deshabilitarVistaCategorias;
|
|
DADataSource.DataTable := FContactos.DataTable;
|
|
cxGridViewCATEGORIAS.GroupIndex := -1;
|
|
end;
|
|
|
|
procedure TfrViewContactos.darListaCategorias(const Cadena: String; var Lista: TStringList);
|
|
var
|
|
CadeaAux: String;
|
|
begin
|
|
Lista.Clear;
|
|
CadeaAux := Cadena;
|
|
|
|
repeat
|
|
if Pos(';', CadeaAux) = 0 then
|
|
begin
|
|
Lista.Add(CadeaAux);
|
|
CadeaAux := ''
|
|
end
|
|
else
|
|
begin
|
|
Lista.Add(Copy(CadeaAux, 0, Pos(';', CadeaAux)-1));
|
|
CadeaAux := Copy(CadeaAux, Pos(';', CadeaAux)+1, Length(CadeaAux));
|
|
end;
|
|
until (Length(CadeaAux) = 0);
|
|
end;
|
|
|
|
procedure TfrViewContactos.deshabilitarVistaCategorias;
|
|
begin
|
|
cxGridView.OnFocusedRecordChanged := Nil;
|
|
DADataSource.DataTable := Nil;
|
|
FContactosMem.Close;
|
|
end;
|
|
|
|
function TfrViewContactos.GetContactos: IBizContacto;
|
|
begin
|
|
Result := FContactos;
|
|
end;
|
|
|
|
procedure TfrViewContactos.habilitarVistaCategorias;
|
|
begin
|
|
DADataSource.DataTable := FContactosMem;
|
|
end;
|
|
|
|
procedure TfrViewContactos.rellenarContactosMem;
|
|
var
|
|
i,j: Integer;
|
|
Lista: TStringList;
|
|
ListaCamposClave: TStringList;
|
|
ListaValoresClave: TStringList;
|
|
CadenaAux: String;
|
|
AValue: Variant;
|
|
begin
|
|
try
|
|
ListaCamposClave := TStringList.Create;
|
|
ListaValoresClave := TStringList.Create;
|
|
Lista := TStringList.Create;
|
|
|
|
deshabilitarVistaCategorias;
|
|
FContactosMem.Open;
|
|
with FContactos do
|
|
begin
|
|
getKeyListAndValueList(DataTable, ListaCamposClave, ListaValoresClave);
|
|
DataTable.Refresh;
|
|
DataTable.DisableControls;
|
|
First;
|
|
while not EOF do
|
|
begin
|
|
//Insertamos tantas tuplas iguales como categorias tenga cada contacto
|
|
j:=0;
|
|
darListaCategorias(LISTACATEGORIAS, Lista);
|
|
repeat
|
|
FContactosMem.Insert;
|
|
for i:=0 to DataTable.Fields.Count-1 do
|
|
FContactosMem.Fields[i].Value := DataTable.Fields[i].Value;
|
|
|
|
if Lista.Count <> 0 then
|
|
FContactosMem.Fields[i].Value := Lista.Strings[j];
|
|
|
|
FContactosMem.Post;
|
|
Inc(j);
|
|
until (j > Lista.Count - 1);
|
|
Next;
|
|
end;
|
|
end;
|
|
finally
|
|
habilitarVistaCategorias;
|
|
CadenaAux := getStrList(ListaCamposClave,';');
|
|
AValue := getArrList(ListaValoresClave);
|
|
FContactos.DataTable.First;
|
|
FContactos.DataTable.Locate(CadenaAux, AValue, []);
|
|
FContactos.DataTable.EnableControls;
|
|
FreeAndNil(Lista);
|
|
FreeAndNil(ListaCamposClave);
|
|
FreeAndNil(ListaValoresClave);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrViewContactos.SetContactos(const Value: IBizContacto);
|
|
begin
|
|
FContactos := Value;
|
|
if Assigned(FContactos) then
|
|
begin
|
|
DADataSource.DataTable := FContactos.DataTable;
|
|
end
|
|
else
|
|
DADataSource.DataTable := Nil;
|
|
end;
|
|
|
|
function TfrViewContactos.GetViewType: TViewType;
|
|
begin
|
|
Result:= FViewType;
|
|
end;
|
|
|
|
procedure TfrViewContactos.SetViewType(const Value: TViewType);
|
|
begin
|
|
FViewType := Value;
|
|
Case FViewType of
|
|
vtAll: actVistaTodos.Execute;
|
|
vtCat: actVistaCategorias.Execute;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrViewContactos.SyncFocusedRecordsGrid;
|
|
var
|
|
AValue : Variant;
|
|
|
|
begin
|
|
if ViewType = vtCat then
|
|
begin
|
|
rellenarContactosMem;
|
|
AValue := FContactos.CODIGO;
|
|
FContactosMem.DisableEventHandlers;
|
|
FContactosMem.DisableControls;
|
|
FContactosMem.Locate(fld_CONTACTOSCODIGO, AValue, []);
|
|
FContactosMem.EnableEventHandlers;
|
|
FContactosMem.EnableControls;
|
|
end;
|
|
|
|
inherited;
|
|
end;
|
|
|
|
procedure TfrViewContactos.cxGridViewCODIGOCustomDrawCell(
|
|
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
|
|
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
|
|
var
|
|
R : TRect;
|
|
begin
|
|
inherited;
|
|
R := AViewInfo.ContentBounds;
|
|
ACanvas.FillRect(R);
|
|
ACanvas.DrawImage(PngImageList, R.Left, R.Top, 0);
|
|
ADone := True;
|
|
end;
|
|
|
|
procedure TfrViewContactos.Preview;
|
|
begin
|
|
cxGridViewCODIGO.Visible := False;
|
|
inherited;
|
|
cxGridViewCODIGO.Visible := True;
|
|
end;
|
|
|
|
procedure TfrViewContactos.Print;
|
|
begin
|
|
cxGridViewCODIGO.Visible := False;
|
|
inherited;
|
|
cxGridViewCODIGO.Visible := True;
|
|
end;
|
|
|
|
procedure TfrViewContactos.RefreshGrid;
|
|
var
|
|
AValue : Variant;
|
|
|
|
begin
|
|
if ViewType = vtCat then
|
|
begin
|
|
rellenarContactosMem;
|
|
AValue := FContactos.CODIGO;
|
|
FContactosMem.DisableEventHandlers;
|
|
FContactosMem.DisableControls;
|
|
FContactosMem.Locate(fld_CONTACTOSCODIGO, AValue, []);
|
|
FContactosMem.EnableEventHandlers;
|
|
FContactosMem.EnableControls;
|
|
end
|
|
else
|
|
inherited;
|
|
end;
|
|
|
|
procedure TfrViewContactos.SyncFocusedRecordsFromDataSet;
|
|
var
|
|
AValue: Variant;
|
|
begin
|
|
AValue := FContactos.CODIGO;
|
|
cxGridView.DataController.GotoFirst;
|
|
cxGridView.DataController.LocateByKey(AValue);
|
|
end;
|
|
|
|
procedure TfrViewContactos.SyncFocusedRecordsFromGrid;
|
|
var
|
|
AValue : Variant;
|
|
i: Integer;
|
|
Clave : String;
|
|
begin
|
|
if ViewType = vtCat then
|
|
begin
|
|
Clave := cxGridView.DataController.KeyFieldNames;
|
|
if Length(Clave) = 0 then
|
|
raise Exception.Create('Falta indicar los campos clave de la tabla en la vista del grid (SyncFocusedRecords)');
|
|
|
|
FContactos.DataTable.DisableEventHandlers;
|
|
FContactos.DataTable.DisableControls;
|
|
try
|
|
for i := 0 to cxGridView.Controller.SelectedRecordCount - 1 do
|
|
begin
|
|
AValue := cxGridView.Controller.SelectedRows[i].Values[cxGridView.GetColumnByFieldName(Clave).Index];
|
|
FContactos.DataTable.First;
|
|
FContactos.DataTable.Locate(Clave, AValue, []);
|
|
end;
|
|
finally
|
|
FContactos.DataTable.EnableEventHandlers;
|
|
FContactos.DataTable.EnableControls;
|
|
end;
|
|
end
|
|
else
|
|
inherited;
|
|
end;
|
|
|
|
end.
|