{ =============================================================================== 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 uEditorObra; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorItem, ToolWin, ComCtrls, JvExControls, JvComponent, JvNavigationPane, ActnList, uEditorBase, StdActns, TB2Dock, TB2Toolbar, TBX, ImgList, PngImageList, TB2Item, uViewObra, uBizObra, uEditorDBItem, DB, uDADataTable, uViewGrid, uCustomView, uViewBase, Grids, DBGrids, StdCtrls, dxLayoutLookAndFeels, JvAppStorage, JvAppRegistryStorage, JvFormPlacement, ExtCtrls, uViewContactosObra, JvComponentBase, uViewPresupuestosObra, uViewTrabajosObra, uViewDocumentosAsociados, cxGridCustomTableView, dxLayoutControl, cxControls, Menus; type IEditorObra = interface(IEditorDBItem) ['{5ED7D648-C211-48A3-AE53-4B3D925ADBC9}'] end; TfEditorObra = class(TfEditorDBItem, IEditorObra) pagContactos: TTabSheet; frViewObra: TfrViewObra; pagPresupuestos: TTabSheet; pagTrabajos: TTabSheet; pagNormativas: TTabSheet; frViewDocumentosAsociados: TfrViewDocumentosAsociados; frViewPresupuestosObra: TfrViewPresupuestosObra; dxLayoutControl1Group_Root: TdxLayoutGroup; dxLayoutControl1: TdxLayoutControl; dxLayoutControl1Item1: TdxLayoutItem; frViewContactosObra: TfrViewContactosObra; dxLayoutControl1Group1: TdxLayoutGroup; dxLayoutControl2Group_Root: TdxLayoutGroup; dxLayoutControl2: TdxLayoutControl; dxLayoutControl2Item1: TdxLayoutItem; frViewTrabajosObra: TfrViewTrabajosObra; dxLayoutControl2Group1: TdxLayoutGroup; MenuTrabajos: TPopupMenu; MenuItem1: TMenuItem; MenuItem2: TMenuItem; MenuItem3: TMenuItem; MenuItem4: TMenuItem; MenuItem5: TMenuItem; MenuContactos: TPopupMenu; MenuItem6: TMenuItem; MenuItem7: TMenuItem; MenuItem8: TMenuItem; MenuItem9: TMenuItem; MenuItem10: TMenuItem; dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; procedure FormShow(Sender: TObject); procedure dsDataTableDataChange(Sender: TObject; Field: TField); procedure actEliminarExecute(Sender: TObject); procedure frViewContactosObraactAnadirExecute(Sender: TObject); procedure frViewContactosObraactEliminarExecute(Sender: TObject); procedure frViewContactosObraactEliminarTodoExecute(Sender: TObject); procedure frViewContactosObraactEditarExecute(Sender: TObject); procedure frViewPresupuestosObraactAnadirPreObrExecute(Sender: TObject); procedure frViewPresupuestosObraactAnadirPreDecExecute(Sender: TObject); procedure frViewPresupuestosObraactEditarPreObrExecute(Sender: TObject); procedure frViewPresupuestosObraactEditarPreDecExecute(Sender: TObject); procedure frViewTrabajosObraactEditarExecute(Sender: TObject); procedure frViewTrabajosObraactAnadirExecute(Sender: TObject); procedure pgPaginasChanging(Sender: TObject; var AllowChange: Boolean); //DOCUMENTOS ASOCIADOS procedure frViewDatosObraedtNombrePropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure frViewContactosObracxGridViewCellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean); procedure frViewTrabajoscxGridViewCellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean); private FViewObra: IViewObra; FViewContactosObra: IViewContactosObra; FViewPresupuestosObra: IViewPresupuestosObra; FViewTrabajosObra: IViewTrabajosObra; FObra: IBizObra; function GetObra: IBizObra; virtual; procedure SetObra(const Value: IBizObra); virtual; protected //DOCUMENTOS ASOCIADOS FViewNormativas : IViewDocumentosAsociados; function GetViewNormativas: IViewDocumentosAsociados; procedure SetViewNormativas(const Value: IViewDocumentosAsociados); property ViewNormativas: IViewDocumentosAsociados read GetViewNormativas write SetViewNormativas; public property Obra: IBizObra read GetObra write SetObra; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation {$R *.dfm} uses uCustomEditor, uDataModuleObras, uDataModuleBase, uEditorUtils, LiteralesObras, uDBSelectionList, uDataModuleContactos, uBizContacto, uBizDocumentosAsociados; function ShowEditorObra (ABizObject : TDADataTableRules) : TModalResult; var AEditor: TfEditorObra; begin AEditor := TfEditorObra.Create(Application); try AEditor.Obra := (ABizObject as IBizObra); Result := AEditor.ShowModal; finally AEditor.Release; end; end; { ******************************* TfEditorObra ******************************* } procedure TfEditorObra.actEliminarExecute(Sender: TObject); begin if (MessageDlg(msgLitBorrar, mtConfirmation, [mbYes, mbNo], 0) = mrYes) then inherited; end; function TfEditorObra.GetObra: IBizObra; begin Result := FObra; end; procedure TfEditorObra.SetObra(const Value: IBizObra); begin FObra := Value; if Assigned(FObra) then begin dsDataTable.DataTable := FObra.DataTable; FViewObra.Obra := Obra; FViewContactosObra.ContactosObra := Obra.Contactos; FViewPresupuestosObra.Presupuestos := Obra.Presupuestos; FViewTrabajosObra.Presupuestos := Obra.Presupuestos; //DOCUMENTOS ASOCIADOS if Assigned(FViewNormativas) then begin FViewNormativas.GestorDocumentos := (Obra as IBizDocumentosAsociados).GestorDocumentos; FViewNormativas.GestorDocumentos.ModoInsert := (Obra.DataTable.State = dsInsert); end; end else dsDataTable.DataTable := Nil; end; procedure TfEditorObra.FormShow(Sender: TObject); begin inherited; if not Assigned(Obra) then raise Exception.Create(msgErrorNoObra); if not Obra.DataTable.Active then Obra.DataTable.Active := True; pgPaginas.ActivePageIndex := 0; end; constructor TfEditorObra.Create(AOwner: TComponent); begin inherited; FViewObra := frViewObra; FViewContactosObra := frViewContactosObra; FViewPresupuestosObra := frViewPresupuestosObra; FViewTrabajosObra := frViewTrabajosObra; //DOCUMENTOS ASOCIADOS ViewNormativas := frViewDocumentosAsociados; end; procedure TfEditorObra.dsDataTableDataChange(Sender: TObject; Field: TField); begin inherited; if Assigned(FObra) and (not (FObra.DataTable.Fetching) or not (FObra.DataTable.Opening) or not (FObra.DataTable.Closing)) then begin if Length(FObra.NOMBRE) = 0 then JvNavPanelHeader.Caption := msgLitObraNuv else JvNavPanelHeader.Caption := msgObras + FObra.NOMBRE; Self.Caption := JvNavPanelHeader.Caption; end; end; procedure TfEditorObra.frViewPresupuestosObraactAnadirPreObrExecute(Sender: TObject); begin inherited; Obra.Presupuestos.Insert; Obra.Presupuestos.CLASE := CLASE_PRESUPUESTO; Obra.Presupuestos.TIPO := TIPO_OBRA; Obra.Presupuestos.Show; end; procedure TfEditorObra.frViewContactosObraactEliminarExecute(Sender: TObject); begin if (MessageDlg(msgLitBorrarContacto, mtConfirmation, [mbYes, mbNo], 0) = mrYes) then Obra.Contactos.Delete; end; procedure TfEditorObra.frViewContactosObraactEliminarTodoExecute(Sender: TObject); begin inherited; if (MessageDlg(msgLitBorrarTContacto, mtConfirmation, [mbYes, mbNo], 0) = mrYes) then Obra.Contactos.DataTable.ClearRows; end; procedure TfEditorObra.frViewContactosObraactAnadirExecute(Sender: TObject); var AContacto : IBizContacto; begin inherited; AContacto := dmContactos.GetContactos; try if AContacto.ShowForMultiSelect = mrOK then begin AContacto := dmContactos.GetItemsSeleccionados(AContacto); Obra.Contactos.AppendContactos(AContacto); end; finally AContacto := NIL; end; end; procedure TfEditorObra.frViewContactosObraactEditarExecute(Sender: TObject); begin inherited; Obra.Contactos.Show; end; destructor TfEditorObra.Destroy; begin FViewObra := Nil; FViewContactosObra := Nil; FViewPresupuestosObra := Nil; FViewTrabajosObra := Nil; //DOCUMENTOS ASOCIADOS FViewNormativas := NIL; inherited; end; procedure TfEditorObra.frViewPresupuestosObraactAnadirPreDecExecute(Sender: TObject); begin inherited; Obra.Presupuestos.Insert; Obra.Presupuestos.CLASE := CLASE_PRESUPUESTO; Obra.Presupuestos.TIPO := TIPO_DECORACION; Obra.Presupuestos.Show; end; procedure TfEditorObra.frViewPresupuestosObraactEditarPreObrExecute(Sender: TObject); begin inherited; Obra.Presupuestos.Show; end; procedure TfEditorObra.frViewPresupuestosObraactEditarPreDecExecute(Sender: TObject); begin inherited; Obra.Presupuestos.Show; end; procedure TfEditorObra.frViewTrabajosObraactEditarExecute(Sender: TObject); begin inherited; Obra.Presupuestos.Show; end; procedure TfEditorObra.frViewTrabajosObraactAnadirExecute(Sender: TObject); begin inherited; Obra.Presupuestos.Insert; Obra.Presupuestos.CLASE := CLASE_TRABAJO; Obra.Presupuestos.Show; end; procedure TfEditorObra.pgPaginasChanging(Sender: TObject; var AllowChange: Boolean); begin inherited; //No se ha asignado aún el cliente if Obra.Cliente.CODIGO = 0 then begin MessageBox(0, PChar(msgLitClienteObligatorio), 'Atención', MB_ICONWARNING or MB_OK); AllowChange := False; end; end; function TfEditorObra.GetViewNormativas: IViewDocumentosAsociados; begin Result := FViewNormativas; end; procedure TfEditorObra.SetViewNormativas(const Value: IViewDocumentosAsociados); begin FViewNormativas := Value; if Assigned(FViewNormativas) and Assigned(Obra) then FViewNormativas.GestorDocumentos := (Obra as IBizDocumentosASociados).GestorDocumentos; end; procedure TfEditorObra.frViewDatosObraedtNombrePropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; //Si cambia el nombre de la obra debe cambiar el nombre del directorio raiz de la estructura if (frViewObra.frViewDatosObra.edtNombre.EditValue <> DisplayValue) then begin frViewDocumentosAsociados.DeshabilitarDocumentos; if Length(DisplayValue)=0 then begin Error := True; ErrorText := msgLitNombreObligatorio; DisplayValue := frViewObra.frViewDatosObra.edtNombre.EditValue; end else begin try frViewDocumentosAsociados.GestorDocumentos.Directorio := DisplayValue; except on E: Exception do begin Error := True; ErrorText := E.Message; DisplayValue := frViewObra.frViewDatosObra.edtNombre.EditValue; end; end; end; frViewDocumentosAsociados.HabilitarDocumentos; end; end; procedure TfEditorObra.frViewContactosObracxGridViewCellDblClick( Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean); begin inherited; frViewContactosObraactEditarExecute(Self); end; procedure TfEditorObra.frViewTrabajoscxGridViewCellDblClick( Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean); begin inherited; frViewTrabajosObraactEditarExecute(Self); end; initialization RegisterEditor(IBizObra, ShowEditorObra, etItem); end.