unit uViewContacto; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uViewBase, ExtCtrls, StdCtrls, Buttons, DB, uDADataTable, DBCtrls, Grids, DBGrids, uBizContactos, Mask, ComCtrls, uCustomView, JvComponent, JvFormAutoSize, cxControls, cxContainer, cxEdit, cxTextEdit, cxDBEdit, dxLayoutControl, dxLayoutLookAndFeels, cxMemo, cxHyperLinkEdit, ImgList, ActnList, PngImageList, PngSpeedButton, uDAInterfaces, uBizEmpresasTiendas, cxGraphics, cxMaskEdit, cxDropDownEdit, uContactosController, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox, uViewTienda, uViewObservaciones, uBizIdiomas, uIdiomasController, cxSpinEdit; type IViewContacto = interface(IViewBase) ['{5FCFD172-5F8A-4639-B479-1CF0061526B5}'] function GetController : IContactosController; procedure SetController (const Value : IContactosController); property Controller : IContactosController read GetController write SetController; function GetContacto: IBizContacto; procedure SetContacto(const Value: IBizContacto); property Contacto: IBizContacto read GetContacto write SetContacto; end; TfrViewContacto = class(TfrViewBase, IViewContacto) dsContacto: TDADataSource; dxLayoutControlContactoGroup_Root: TdxLayoutGroup; dxLayoutControlContacto: TdxLayoutControl; dxLayoutControlContactoGroup1: TdxLayoutGroup; dxLayoutControlContactoGroup2: TdxLayoutGroup; dxLayoutControlContactoGroup3: TdxLayoutGroup; dxLayoutControlContactoGroup4: TdxLayoutGroup; dxLayoutControlContactoGroup5: TdxLayoutGroup; dxLayoutControlContactoGroup6: TdxLayoutGroup; dxLayoutControlContactoGroup7: TdxLayoutGroup; dxLayoutControlContactoGroup9: TdxLayoutGroup; dxLayoutControlContactoItem1: TdxLayoutItem; eCalle: TcxDBTextEdit; dxLayoutControlContactoItem2: TdxLayoutItem; cbProvincia: TcxDBComboBox; dxLayoutControlContactoItem3: TdxLayoutItem; cbPoblacion: TcxDBComboBox; dxLayoutControlContactoItem4: TdxLayoutItem; eCodigoPostal: TcxDBTextEdit; dxLayoutControlContactoItem9: TdxLayoutItem; eTlfParticular: TcxDBTextEdit; dxLayoutControlContactoItem10: TdxLayoutItem; eTlfTrabajo: TcxDBTextEdit; dxLayoutControlContactoItem11: TdxLayoutItem; eTlfMovil: TcxDBTextEdit; dxLayoutControlContactoItem12: TdxLayoutItem; eFax: TcxDBTextEdit; dxLayoutControlContactoItem13: TdxLayoutItem; eNombre: TcxDBTextEdit; dxLayoutControlContactoItem14: TdxLayoutItem; eNIFCIF: TcxDBTextEdit; dxLayoutControlContactoItem7: TdxLayoutItem; eMailTrabajo: TcxDBHyperLinkEdit; ActionList1: TActionList; actMandarCorreoParticular: TAction; actMandarCorreoTrabajo: TAction; actVerPaginaWeb: TAction; dxLayoutControlContactoItem6: TdxLayoutItem; eMailParticular: TcxDBHyperLinkEdit; dxLayoutControlContactoGroup110: TdxLayoutGroup; dxLayoutControlContactoItem5: TdxLayoutItem; ePaginaWeb: TcxDBHyperLinkEdit; ImageList1: TPngImageList; PngSpeedButton1: TPngSpeedButton; dxLayoutControlContactoItem15: TdxLayoutItem; PngSpeedButton2: TPngSpeedButton; dxLayoutControlContactoItem17: TdxLayoutItem; PngSpeedButton3: TPngSpeedButton; dxLayoutControlContactoItem18: TdxLayoutItem; dxLayoutControlContactoGroup12: TdxLayoutGroup; dxLayoutControlContactoGroup13: TdxLayoutGroup; dxLayoutControlContactoGroup11: TdxLayoutGroup; dxLayoutControlContactoItem25: TdxLayoutItem; eReferencia: TcxDBTextEdit; dxLayoutControlContactoGroup16: TdxLayoutGroup; dxLayoutControlContactoItem167: TdxLayoutItem; ePersonaContacto: TcxDBTextEdit; dxLayoutControlContactoGroup100: TdxLayoutGroup; frViewTienda1: TfrViewTienda; dxLayoutControlContactoItem16: TdxLayoutItem; dxLayoutControlContactoGroup10: TdxLayoutGroup; frViewObservaciones1: TfrViewObservaciones; dxLayoutControlContactoItem8: TdxLayoutItem; dxLayoutControlContactoItem19: TdxLayoutItem; cbPais: TcxDBComboBox; dxLayoutControlContactoItem20: TdxLayoutItem; cbIdioma: TcxDBLookupComboBox; dsIdiomas: TDADataSource; procedure eMailTrabajoPropertiesEditValueChanged(Sender: TObject); procedure actMandarCorreoParticularExecute(Sender: TObject); procedure actMandarCorreoTrabajoExecute(Sender: TObject); procedure actVerPaginaWebExecute(Sender: TObject); procedure actMandarCorreoParticularUpdate(Sender: TObject); procedure actMandarCorreoTrabajoUpdate(Sender: TObject); procedure actVerPaginaWebUpdate(Sender: TObject); procedure eMailTrabajoPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure cbProvinciaPropertiesInitPopup(Sender: TObject); procedure cbPoblacionPropertiesInitPopup(Sender: TObject); procedure cbPaisPropertiesInitPopup(Sender: TObject); procedure eNIFCIFPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); private FProvincias : TStringList; FIDProvincia : Integer; //Almacenará la provincia que hay seleccionada para no cargar las poblaciones si no es necesario FPoblaciones : TStringList; FPaises : TStringList; FIdiomas : IBizIdioma; FIdiomasController: IIdiomasController; procedure CargarPaises; procedure CargarProvincias; procedure CargarPoblaciones; protected FContacto: IBizContacto; FController: IContactosController; function GetContacto: IBizContacto; virtual; procedure SetContacto(const Value: IBizContacto); virtual; function GetController : IContactosController; procedure SetController (const Value : IContactosController); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Contacto: IBizContacto read GetContacto write SetContacto; property Controller : IContactosController read GetController write SetController; end; implementation {$R *.dfm} uses uFactuGES_App, uProvinciasPoblacionesController, uStringsUtils; type THackcxDBHyperLinkEdit = class(TcxDBHyperLinkEdit); { TfrViewContactos } { ******************************* TfrViewContacto ******************************** } procedure TfrViewContacto.actMandarCorreoParticularExecute(Sender: TObject); begin inherited; THackcxDBHyperLinkEdit(eMailParticular).DoStart; end; procedure TfrViewContacto.actMandarCorreoParticularUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (Length(eMailParticular.Text) > 0) end; procedure TfrViewContacto.actMandarCorreoTrabajoExecute(Sender: TObject); begin inherited; THackcxDBHyperLinkEdit(eMailTrabajo).DoStart; end; procedure TfrViewContacto.actMandarCorreoTrabajoUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (Length(eMailTrabajo.Text) > 0) end; procedure TfrViewContacto.actVerPaginaWebExecute(Sender: TObject); begin inherited; THackcxDBHyperLinkEdit(ePaginaWeb).DoStart; end; procedure TfrViewContacto.actVerPaginaWebUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (Length(ePaginaWeb.Text) > 0) end; procedure TfrViewContacto.CargarPaises; var i : integer; begin with TProvinciasPoblacionesController.Create do try FPaises := DarListaPaises; with cbPais.Properties.Items do begin BeginUpdate; try Clear; for i := 0 to FPaises.Count - 1 do Add(FPaises.Names[i]); finally EndUpdate; end; end; finally Free; end; end; procedure TfrViewContacto.CargarPoblaciones; var i : integer; begin if (FIDProvincia <> StrToInt(FProvincias.Values[cbProvincia.Text])) then Begin FIDProvincia := StrToInt(FProvincias.Values[cbProvincia.Text]); with TProvinciasPoblacionesController.Create do begin try FPoblaciones := DarListaPoblaciones(FIDProvincia); with cbPoblacion.Properties.Items do begin BeginUpdate; try Clear; for i := 0 to FPoblaciones.Count - 1 do Add(FPoblaciones.Names[i]); finally EndUpdate; end; end; finally Free; end; end; End; end; procedure TfrViewContacto.CargarProvincias; var i : integer; begin with TProvinciasPoblacionesController.Create do begin try FProvincias := DarListaProvincias; with cbProvincia.Properties.Items do begin BeginUpdate; try Clear; for i := 0 to FProvincias.Count - 1 do Add(FProvincias.Names[i]); finally EndUpdate; end; end; finally Free; end; end; end; procedure TfrViewContacto.cbPaisPropertiesInitPopup(Sender: TObject); begin ShowHourglassCursor; try if not Assigned(FPaises) then CargarPaises; finally HideHourglassCursor; end; end; procedure TfrViewContacto.cbPoblacionPropertiesInitPopup(Sender: TObject); begin ShowHourglassCursor; try FreeANDNIL(FPoblaciones); if not Assigned(FProvincias) then CargarProvincias; if not EsCadenaVacia(cbProvincia.Text) and (FProvincias.IndexOfName(cbProvincia.Text) <> -1) then CargarPoblaciones finally HideHourglassCursor; end; end; procedure TfrViewContacto.cbProvinciaPropertiesInitPopup(Sender: TObject); begin ShowHourglassCursor; try if not Assigned(FProvincias) then CargarProvincias; finally HideHourglassCursor; end; end; constructor TfrViewContacto.Create(AOwner: TComponent); begin inherited; FIDProvincia := 0; FProvincias := NIL; FPoblaciones := NIL; FIdiomas := Nil; FIdiomasController := TIdiomasController.Create; end; destructor TfrViewContacto.Destroy; begin if Assigned(FProvincias) then FreeANDNIL(FProvincias); if Assigned(FPoblaciones) then FreeANDNIL(FPoblaciones); FIdiomas := Nil; FIdiomasController := Nil; inherited; end; procedure TfrViewContacto.eMailTrabajoPropertiesEditValueChanged(Sender: TObject); begin inherited; if not VarIsNull((Sender as TcxDBHyperLinkEdit).EditValue) then (Sender as TcxDBHyperLinkEdit).EditValue := StringReplace((Sender as TcxDBHyperLinkEdit).EditValue, (Sender as TcxDBHyperLinkEdit).Properties.Prefix, '', []); end; procedure TfrViewContacto.eMailTrabajoPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; if not VarIsNull(DisplayValue) then DisplayValue := StringReplace(DisplayValue, (Sender as TcxDBHyperLinkEdit).Properties.Prefix, '', []); end; procedure TfrViewContacto.eNIFCIFPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); var NifCifTratado: String; NifValido: Boolean; CifValido: Boolean; begin inherited; NifValido:= false; CifValido:= false; NifCifTratado := uStringsUtils.CadLimpiaCar(DisplayValue); NifValido := uStringsUtils.comprobarLetraNIF(NifCifTratado); if not NifValido then CifValido := uStringsUtils.validarCIF(NifCifTratado); if not (NifValido or CifValido) then if (Application.MessageBox('El DNI/NIF/CIF introducido no es correcto, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then eNIFCIF.SetFocus; end; function TfrViewContacto.GetContacto: IBizContacto; begin Result := FContacto; end; function TfrViewContacto.GetController: IContactosController; begin Result := FController; end; procedure TfrViewContacto.SetContacto(const Value: IBizContacto); begin FContacto := Value; if Assigned(FContacto) then begin dsContacto.DataTable := FContacto.DataTable; frViewTienda1.DataItem := FContacto.DataTable; end else begin dsContacto.DataTable := Nil; end; end; procedure TfrViewContacto.SetController(const Value: IContactosController); begin FController := Value; if Assigned(FController) then begin FIdiomas := FIdiomasController.BuscarTodos; dsIdiomas.DataTable := FIdiomas.DataTable; dsIdiomas.DataTable.Active := True; end; end; initialization RegisterClass(TfrViewContacto); finalization UnRegisterClass(TfrViewContacto); end.