diff --git a/Source/Modulos/Obras/Controller/Obras_controller.dpk b/Source/Modulos/Obras/Controller/Obras_controller.dpk index 901b7049..76843361 100644 Binary files a/Source/Modulos/Obras/Controller/Obras_controller.dpk and b/Source/Modulos/Obras/Controller/Obras_controller.dpk differ diff --git a/Source/Modulos/Obras/Controller/Obras_controller.dproj b/Source/Modulos/Obras/Controller/Obras_controller.dproj index 398943a7..9f80d81d 100644 --- a/Source/Modulos/Obras/Controller/Obras_controller.dproj +++ b/Source/Modulos/Obras/Controller/Obras_controller.dproj @@ -39,17 +39,18 @@ Delphi.Personality Package -FalseTrueFalseTrueFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0Obras_controller.dpk +FalseTrueFalseFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0Obras_controller.dpk MainSource - - - - + + + + + diff --git a/Source/Modulos/Obras/Controller/Obras_controller.res b/Source/Modulos/Obras/Controller/Obras_controller.res index 8b251f31..1641339f 100644 Binary files a/Source/Modulos/Obras/Controller/Obras_controller.res and b/Source/Modulos/Obras/Controller/Obras_controller.res differ diff --git a/Source/Modulos/Obras/Controller/uObrasController.pas b/Source/Modulos/Obras/Controller/uObrasController.pas index d575a94c..1a707854 100644 --- a/Source/Modulos/Obras/Controller/uObrasController.pas +++ b/Source/Modulos/Obras/Controller/uObrasController.pas @@ -5,7 +5,7 @@ interface uses Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem, - uIDataModuleObras, uBizObras; + uIDataModuleObras, uBizObras, uBizDireccionesContacto; type IObrasController = interface(IObservador) @@ -25,6 +25,9 @@ type function Duplicar(AObra: IBizObra): IBizObra; procedure Preview(AObra : IBizObra); procedure Print(AObra : IBizObra); + + procedure QuitarDireccion(AObra: IBizObra); + procedure CopiarDireccion (const ADireccionEnvio: IBizDireccionesContacto; AObra: IBizObra); end; TObrasController = class(TObservador, IObrasController) @@ -66,6 +69,9 @@ type function Duplicar(AObra: IBizObra): IBizObra; procedure Preview(AObra : IBizObra); procedure Print(AObra : IBizObra); + + procedure QuitarDireccion(AObra: IBizObra); + procedure CopiarDireccion (const ADireccionEnvio: IBizDireccionesContacto; AObra: IBizObra); end; implementation @@ -120,6 +126,44 @@ begin FiltrarEmpresa(Result); end; +procedure TObrasController.CopiarDireccion(const ADireccionEnvio: IBizDireccionesContacto; AObra: IBizObra); +var + bEnEdicion : Boolean; +begin + if not Assigned(AObra) then + raise Exception.Create ('Obra no asignada (CopiarDireccion)'); + + if not Assigned(ADireccionEnvio) then + raise Exception.Create ('No se ha indicado la dirección (CopiarDireccionEnvio)'); + + if AObra.DataTable.Active then + AObra.DataTable.Active := True; + + if ADireccionEnvio.DataTable.Active then + ADireccionEnvio.DataTable.Active := True; + + + bEnEdicion := (AObra.DataTable.State in dsEditModes); + if not bEnEdicion then + AObra.Edit; + + ShowHourglassCursor; + AObra.Edit; + try + AObra.CALLE := ADireccionEnvio.CALLE; + AObra.POBLACION := ADireccionEnvio.POBLACION; + AObra.CODIGO_POSTAL := ADireccionEnvio.CODIGO_POSTAL; + AObra.PROVINCIA := ADireccionEnvio.PROVINCIA; + AObra.TELEFONO := ADireccionEnvio.TELEFONO; + AObra.PERSONA_CONTACTO := ADireccionEnvio.PERSONA_CONTACTO; + + if not bEnEdicion then + AObra.Post; + finally + HideHourglassCursor; + end; +end; + constructor TObrasController.Create; begin inherited; @@ -413,4 +457,35 @@ begin } end; +procedure TObrasController.QuitarDireccion(AObra: IBizObra); +var + bEnEdicion : Boolean; +begin + if not Assigned(AObra) then + raise Exception.Create ('Obra no asignada (QuitarDireccion)'); + + if AObra.DataTable.Active then + AObra.DataTable.Active := True; + + bEnEdicion := (AObra.DataTable.State in dsEditModes); + if not bEnEdicion then + AObra.Edit; + + ShowHourglassCursor; + AObra.Edit; + try + AObra.DataTable.FieldByName(fld_ObrasCALLE).Clear; + AObra.DataTable.FieldByName(fld_ObrasPOBLACION).Clear; + AObra.DataTable.FieldByName(fld_ObrasCODIGO_POSTAL).Clear; + AObra.DataTable.FieldByName(fld_ObrasPROVINCIA).Clear; + AObra.DataTable.FieldByName(fld_ObrasTELEFONO).Clear; + AObra.DataTable.FieldByName(fld_ObrasPERSONA_CONTACTO).Clear; + + if not bEnEdicion then + AObra.Post; + finally + HideHourglassCursor; + end; +end; + end. diff --git a/Source/Modulos/Obras/Obras_Group.groupproj b/Source/Modulos/Obras/Obras_Group.groupproj index e18054ed..a9b568d1 100644 --- a/Source/Modulos/Obras/Obras_Group.groupproj +++ b/Source/Modulos/Obras/Obras_Group.groupproj @@ -9,6 +9,7 @@ + @@ -111,14 +112,23 @@ + + + + + + + + + - + - + - + \ No newline at end of file diff --git a/Source/Modulos/Obras/Views/Obras_view.dpk b/Source/Modulos/Obras/Views/Obras_view.dpk index df631a54..c22ed4f7 100644 Binary files a/Source/Modulos/Obras/Views/Obras_view.dpk and b/Source/Modulos/Obras/Views/Obras_view.dpk differ diff --git a/Source/Modulos/Obras/Views/Obras_view.dproj b/Source/Modulos/Obras/Views/Obras_view.dproj index 64da4634..c579ccb9 100644 --- a/Source/Modulos/Obras/Views/Obras_view.dproj +++ b/Source/Modulos/Obras/Views/Obras_view.dproj @@ -40,19 +40,21 @@ Delphi.Personality Package -FalseTrueFalseTrueFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0Obras_view.dpk +FalseTrueFalseFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0Obras_view.dpk MainSource - - - - - - + + + + + + + +
fEditorListaObras
TfListaObras diff --git a/Source/Modulos/Obras/Views/Obras_view.res b/Source/Modulos/Obras/Views/Obras_view.res index 8b251f31..1641339f 100644 Binary files a/Source/Modulos/Obras/Views/Obras_view.res and b/Source/Modulos/Obras/Views/Obras_view.res differ diff --git a/Source/Modulos/Obras/Views/uEditorObra.pas b/Source/Modulos/Obras/Views/uEditorObra.pas index 051af9b7..bec96ba7 100644 --- a/Source/Modulos/Obras/Views/uEditorObra.pas +++ b/Source/Modulos/Obras/Views/uEditorObra.pas @@ -122,6 +122,8 @@ end; procedure TfEditorObra.SetController(const Value: IObrasController); begin FController := Value; + if Assigned(FViewObra) and Assigned(FController) then + FViewObra.Controller := FController; end; procedure TfEditorObra.SetViewObra(const Value: IViewObra); diff --git a/Source/Modulos/Obras/Views/uViewClienteAsociadoObra.pas b/Source/Modulos/Obras/Views/uViewClienteAsociadoObra.pas index f3da308c..98c4b4dd 100644 --- a/Source/Modulos/Obras/Views/uViewClienteAsociadoObra.pas +++ b/Source/Modulos/Obras/Views/uViewClienteAsociadoObra.pas @@ -12,7 +12,7 @@ uses dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinSilver, dxSkinStardust, dxSkinsDefaultPainters, dxSkinValentine, dxSkinXmas2008Blue, - dxSkinsdxLCPainter; + dxSkinsdxLCPainter, dxSkinBlack; type TfrViewClienteAsociadoObra = class(TfrViewDatosYSeleccionCliente) diff --git a/Source/Modulos/Obras/Views/uViewObra.dfm b/Source/Modulos/Obras/Views/uViewObra.dfm index 45358316..982ddd8a 100644 --- a/Source/Modulos/Obras/Views/uViewObra.dfm +++ b/Source/Modulos/Obras/Views/uViewObra.dfm @@ -1,6 +1,6 @@ inherited frViewObra: TfrViewObra - Width = 661 - Height = 479 + Width = 451 + Height = 304 Align = alClient AutoSize = True ExplicitWidth = 451 @@ -8,18 +8,16 @@ inherited frViewObra: TfrViewObra object dxLayoutControlObra: TdxLayoutControl Left = 0 Top = 0 - Width = 661 - Height = 479 + Width = 451 + Height = 304 Align = alClient ParentBackground = True TabOrder = 0 TabStop = False AutoContentSizes = [acsWidth, acsHeight] - ExplicitWidth = 451 - ExplicitHeight = 304 DesignSize = ( - 661 - 479) + 451 + 304) object eNombre: TcxDBTextEdit Left = 130 Top = 34 @@ -141,10 +139,10 @@ inherited frViewObra: TfrViewObra StyleHot.LookAndFeel.Kind = lfStandard StyleHot.LookAndFeel.NativeStyle = True TabOrder = 5 - Width = 205 + Width = 116 end object eCodigoPostal: TcxDBTextEdit - Left = 234 + Left = 189 Top = 145 DataBinding.DataField = 'CODIGO_POSTAL' DataBinding.DataSource = DADataSource @@ -185,7 +183,7 @@ inherited frViewObra: TfrViewObra StyleHot.LookAndFeel.Kind = lfStandard StyleHot.LookAndFeel.NativeStyle = True TabOrder = 3 - Width = 65 + Width = 20 end object eObservaciones: TcxDBMemo Left = 22 @@ -208,7 +206,7 @@ inherited frViewObra: TfrViewObra Width = 390 end inline frViewSubcontrataObra1: TfrViewSubcontrataObra - Left = 321 + Left = 276 Top = 283 Width = 136 Height = 150 @@ -220,13 +218,13 @@ inherited frViewObra: TfrViewObra ParentFont = False TabOrder = 10 ReadOnly = False - ExplicitLeft = 321 + ExplicitLeft = 276 ExplicitTop = 283 ExplicitWidth = 136 ExplicitHeight = 150 inherited dxLayoutControl1: TdxLayoutControl Width = 136 - ExplicitWidth = 173 + ExplicitWidth = 136 inherited edtlNombre: TcxDBTextEdit ExplicitWidth = 213 Width = 213 @@ -282,9 +280,9 @@ inherited frViewObra: TfrViewObra end end inline frViewClienteAsociadoObra1: TfrViewClienteAsociadoObra - Left = 321 + Left = 276 Top = 34 - Width = 351 + Width = 136 Height = 213 Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -294,15 +292,15 @@ inherited frViewObra: TfrViewObra ParentFont = False TabOrder = 9 ReadOnly = False - ExplicitLeft = 321 + ExplicitLeft = 276 ExplicitTop = 34 - ExplicitWidth = 351 + ExplicitWidth = 136 ExplicitHeight = 213 inherited dxLayoutControl1: TdxLayoutControl - Width = 351 + Width = 136 Height = 213 - ExplicitWidth = 405 - ExplicitHeight = 159 + ExplicitWidth = 351 + ExplicitHeight = 213 inherited edtlNombre: TcxDBTextEdit ExplicitWidth = 210 Width = 210 @@ -324,12 +322,12 @@ inherited frViewObra: TfrViewObra Width = 210 end inherited edtCodigoPostal: TcxDBTextEdit - Left = 209 - ExplicitLeft = 209 + Left = 192 + ExplicitLeft = 192 end inherited Button3: TBitBtn - Left = 99 - ExplicitLeft = 99 + Left = 82 + ExplicitLeft = 82 end end end diff --git a/Source/Modulos/Obras/Views/uViewObra.pas b/Source/Modulos/Obras/Views/uViewObra.pas index ec1bcf58..da6d1d8c 100644 --- a/Source/Modulos/Obras/Views/uViewObra.pas +++ b/Source/Modulos/Obras/Views/uViewObra.pas @@ -14,7 +14,8 @@ uses dxSkinMcSkin, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinSilver, dxSkinStardust, dxSkinsDefaultPainters, dxSkinValentine, - dxSkinXmas2008Blue, dxSkinsdxLCPainter, cxGraphics, cxMaskEdit, cxDropDownEdit; + dxSkinXmas2008Blue, dxSkinsdxLCPainter, cxGraphics, cxMaskEdit, cxDropDownEdit, + dxSkinBlack, uObrasController; type IViewObra = interface(IViewBase) @@ -22,8 +23,11 @@ type function GetObra: IBizObra; procedure SetObra(const Value: IBizObra); property Obra: IBizObra read GetObra write SetObra; + function GetController : IObrasController; + procedure SetController (const Value : IObrasController); + property Controller: IObrasController read GetController write SetController; end; - + TfrViewObra = class(TfrViewBase, IViewObra) DADataSource: TDADataSource; ePersonaContacto: TcxDBTextEdit; @@ -59,7 +63,7 @@ type dxLayoutControlObraGroup10: TdxLayoutGroup; dxLayoutControlObraItem8: TdxLayoutItem; frViewSubcontrataObra1: TfrViewSubcontrataObra; - frViewClienteAsociadoObra1: TfrViewClienteAsociadoObra; + frViewClienteAsociadoObra1: TfrViewClienteAsociadoObra; dxLayoutControlObraItem12: TdxLayoutItem; dxLayoutControlObraItem13: TdxLayoutItem; dxLayoutControlObraGroup11: TdxLayoutGroup; @@ -67,6 +71,7 @@ type procedure cbProvinciaPropertiesInitPopup(Sender: TObject); protected FObra: IBizObra; + FController : IObrasController; FProvincias : TStringList; FPoblaciones : TStringList; procedure CargarProvincias; @@ -74,17 +79,21 @@ type function GetObra: IBizObra; procedure SetObra(const Value: IBizObra); procedure OnClienteChanged(Sender : TObject); - procedure OnSubcontrataChanged(Sender : TObject); + procedure OnSubcontrataChanged(Sender : TObject); + function GetController : IObrasController; + procedure SetController (const Value : IObrasController); virtual; public constructor Create(AOwner : TComponent); override; destructor Destroy; override; property Obra: IBizObra read GetObra write SetObra; + property Controller: IObrasController read GetController write SetController; end; - + implementation uses - uDataModuleObras, uProvinciasPoblacionesController, uStringsUtils; + uDataModuleObras, uProvinciasPoblacionesController, uStringsUtils, + uClientesController, uBizDireccionesContacto; {$R *.dfm} @@ -184,20 +193,60 @@ begin if Assigned(FPoblaciones) then FreeANDNIL(FPoblaciones); + FObra := Nil; + FController := Nil; inherited; end; +function TfrViewObra.GetController: IObrasController; +begin + Result := FController; +end; + function TfrViewObra.GetObra: IBizObra; begin Result := FObra; end; procedure TfrViewObra.OnClienteChanged(Sender: TObject); +var + AClientesController : IClientesController; + ADireccion : IBizDireccionesContacto; + begin if Assigned(FObra) then begin FObra.Edit; FObra.ID_CLIENTE := frViewClienteAsociadoObra1.ID_Cliente; + + AClientesController := TClientesController.Create; + try + { // Esto podría ser configurable en el programa + if not AClientesController.TieneDatosBancarios(FPresupuesto.Cliente) then + MessageBox(0, 'Este cliente no tiene datos bancarios en su ficha', 'Atención', MB_ICONWARNING or MB_OK);} + + case frViewClienteAsociadoObra1.Cliente.Direcciones.RecordCount of + 0 : begin + FController.QuitarDireccion(FObra); + end; + 1 : begin + FController.CopiarDireccion(frViewClienteAsociadoObra1.Cliente.Direcciones, FObra); + end + else begin + ADireccion := AClientesController.ElegirDireccionEntrega(frViewClienteAsociadoObra1.Cliente.Direcciones, ''); + ShowHourglassCursor; + try + if Assigned(ADireccion) then + FController.CopiarDireccion(ADireccion, FObra); + finally + HideHourglassCursor; + ADireccion := NIL; + end; + end; + end; + finally + AClientesController := NIL; + end; end; end; @@ -210,6 +259,11 @@ begin end; end; +procedure TfrViewObra.SetController(const Value: IObrasController); +begin + FController := Value; +end; + procedure TfrViewObra.SetObra(const Value: IBizObra); begin FObra := Value; diff --git a/Source/Modulos/Obras/Views/uViewSubcontrataObra.pas b/Source/Modulos/Obras/Views/uViewSubcontrataObra.pas index c8cff2b0..290b898c 100644 --- a/Source/Modulos/Obras/Views/uViewSubcontrataObra.pas +++ b/Source/Modulos/Obras/Views/uViewSubcontrataObra.pas @@ -12,7 +12,7 @@ uses dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinSilver, dxSkinStardust, dxSkinsDefaultPainters, dxSkinValentine, dxSkinXmas2008Blue, - dxSkinsdxLCPainter; + dxSkinsdxLCPainter, dxSkinBlack; type TfrViewSubcontrataObra = class(TfrViewDatosYSeleccionProveedor)