unit uBizObras; interface uses uDAInterfaces, uDADataTable, schObrasClient_Intf, uBizContactos, uDBSelectionListUtils; const BIZ_CLIENT_OBRA = 'Client.Obra'; BIZ_CLIENT_OBRA_EJECUCION = 'Client.Obra.Ejecucion'; // BIZ_CLIENT_OBRA_EJECUCIONES_CERRADAS = 'Client.Obra.EjecucionesCerradas'; // BIZ_CLIENT_OBRA_EJECUCION_ENCURSO = 'Client.Obra.EjecucionEnCurso'; BIZ_CLIENT_OBRA_EJECUCION_PRESUPUESTO = 'Client.Obra.Ejecucion.Presupuesto'; BIZ_CLIENT_OBRA_EJECUCION_PEDIDO_PROVEEDOR = 'Client.Obra.Ejecucion.PedidoProveedor'; type IBizEjecucionPresupuestos = interface(IObrasEjecucionesPresupuestos) ['{F335B047-7559-4C40-8DA7-E06719D1F683}'] function EsNuevo : Boolean; end; IBizEjecucionPedidosProveedor = interface(IObrasEjecucionesPedidosProveedor) ['{404DB8A7-7D36-459B-8C6A-33139B40F2C5}'] function EsNuevo : Boolean; end; IBizEjecucionesObra = interface(IObrasEjecuciones) ['{6BAFA32B-39A5-4BC3-9F16-97A36745C3D9}'] function EsNuevo : Boolean; function EnCurso : Boolean; procedure RecalcularBeneficio; function GetPresupuestos: IBizEjecucionPresupuestos; procedure SetPresupuestos(Value: IBizEjecucionPresupuestos); property Presupuestos: IBizEjecucionPresupuestos read GetPresupuestos write SetPresupuestos; function GetPedidos: IBizEjecucionPedidosProveedor; procedure SetPedidos(Value: IBizEjecucionPedidosProveedor); property Pedidos: IBizEjecucionPedidosProveedor read GetPedidos write SetPedidos; end; // IBizEjecucionesCerradasObra = interface(IObrasEjecucionesTerminadas) // ['{08CB6A7C-058C-4A07-AFED-64D861296BFE}'] // {procedure SetSubcontrata(AValue : IBizProveedor); // function GetSubcontrata : IBizProveedor; // property Subcontrata : IBizProveedor read GetSubcontrata write SetSubcontrata;} // // // Esta propidad es para que el controlador pueda acceder directamente // // a la propiedad Cliente // {procedure _SetSubcontrata(AValue : IBizProveedor); // function _GetSubcontrata : IBizProveedor; // property _Subcontrata : IBizProveedor read _GetSubcontrata write _SetSubcontrata;} // end; // // // IBizEjecucionEnCursoObra = interface(IObrasEjecucionesEnCurso) // ['{DDEE3280-32B0-4C5C-AC14-9AADD641407D}'] // function EsNuevo : Boolean; // {procedure SetSubcontrata(AValue : IBizProveedor); // function GetSubcontrata : IBizProveedor; // property Subcontrata : IBizProveedor read GetSubcontrata write SetSubcontrata;} // // // Esta propidad es para que el controlador pueda acceder directamente // // a la propiedad Cliente // {procedure _SetSubcontrata(AValue : IBizProveedor); // function _GetSubcontrata : IBizProveedor; // property _Subcontrata : IBizProveedor read _GetSubcontrata write _SetSubcontrata;} // end; IBizObra = interface(IObras) ['{96A7EC59-23CB-44FF-B3CF-8679C6F001C8}'] procedure SetCliente(AValue : IBizCliente); function GetCliente : IBizCliente; property Cliente : IBizCliente read GetCliente write SetCliente; // Esta propidad es para que el controlador pueda acceder directamente // a la propiedad Cliente procedure _SetCliente(AValue : IBizCliente); function _GetCliente : IBizCliente; property _Cliente : IBizCliente read _GetCliente write _SetCliente; function GetEjecuciones: IBizEjecucionesObra; procedure SetEjecuciones(Value: IBizEjecucionesObra); property Ejecuciones: IBizEjecucionesObra read GetEjecuciones write SetEjecuciones; function EsNuevo : Boolean; end; TBizEjecucionPresupuestos = class(TObrasEjecucionesPresupuestosDataTableRules, IBizEjecucionPresupuestos) protected procedure BeforeInsert(Sender: TDADataTable); override; public function EsNuevo : Boolean; end; TBizEjecucionPedidosProveedor = class(TObrasEjecucionesPedidosProveedorDataTableRules, IBizEjecucionPedidosProveedor) protected procedure BeforeInsert(Sender: TDADataTable); override; public function EsNuevo : Boolean; end; TBizEjecucionesObra = class(TObrasEjecucionesDataTableRules, IBizEjecucionesObra) protected FPresupuestos : IBizEjecucionPresupuestos; FPresupuestosLink : TDADataSource; FPedidos : IBizEjecucionPedidosProveedor; FPedidosLink : TDADataSource; procedure BeforeInsert(Sender: TDADataTable); override; procedure OnNewRecord(Sender: TDADataTable); override; function GetPresupuestos: IBizEjecucionPresupuestos; procedure SetPresupuestos(Value: IBizEjecucionPresupuestos); function GetPedidos: IBizEjecucionPedidosProveedor; procedure SetPedidos(Value: IBizEjecucionPedidosProveedor); public function EsNuevo : Boolean; function EnCurso : Boolean; procedure RecalcularBeneficio; constructor Create(aDataTable: TDADataTable); override; destructor Destroy; override; property Presupuestos: IBizEjecucionPresupuestos read GetPresupuestos write SetPresupuestos; property Pedidos: IBizEjecucionPedidosProveedor read GetPedidos write SetPedidos; end; // TBizEjecucionesCerradasObra = class(TObrasEjecucionesTerminadasDataTableRules, IBizEjecucionesCerradasObra) // protected //// FSubcontrata : IBizProveedor; // // procedure BeforeInsert(Sender: TDADataTable); override; // procedure OnNewRecord(Sender: TDADataTable); override; // // //{ procedure _SetSubcontrata(AValue : IBizProveedor); // function _GetSubcontrata : IBizProveedor; // // procedure SetSubcontrata(AValue : IBizProveedor); // function GetSubcontrata : IBizProveedor;} // public // constructor Create(aDataTable: TDADataTable); override; // destructor Destroy; override; // //{ property Subcontrata : IBizProveedor read GetSubcontrata write SetSubcontrata; // property _Subcontrata : IBizProveedor read _GetSubcontrata write _SetSubcontrata;} // end; // // TBizEjecucionEnCursoObra = class(TObrasEjecucionesEnCursoDataTableRules, IBizEjecucionEnCursoObra) // protected //// FSubcontrata : IBizProveedor; // // procedure BeforeInsert(Sender: TDADataTable); override; // procedure OnNewRecord(Sender: TDADataTable); override; // //{ procedure _SetSubcontrata(AValue : IBizProveedor); // function _GetSubcontrata : IBizProveedor; // // procedure SetSubcontrata(AValue : IBizProveedor); // function GetSubcontrata : IBizProveedor;} // public // function EsNuevo : Boolean; // constructor Create(aDataTable: TDADataTable); override; // destructor Destroy; override; // //{ property Subcontrata : IBizProveedor read GetSubcontrata write SetSubcontrata; // property _Subcontrata : IBizProveedor read _GetSubcontrata write _SetSubcontrata;} // end; TBizObra = class(TObrasDataTableRules, IBizObra, ISeleccionable) protected FSeleccionableInterface : ISeleccionable; FCliente : IBizCliente; // FEjecucionEnCurso : IBizEjecucionEnCursoObra; // FEjecucionEnCursoLink : TDADataSource; FEjecuciones : IBizEjecucionesObra; FEjecucionesLink : TDADataSource; procedure SetCliente(AValue : IBizCliente); function GetCliente : IBizCliente; procedure _SetCliente(AValue : IBizCliente); function _GetCliente : IBizCliente; function GetEjecuciones: IBizEjecucionesObra; procedure SetEjecuciones(Value: IBizEjecucionesObra); // function GetEjecucionEnCurso: IBizEjecucionEnCursoObra; // procedure SetEjecucionEnCurso(Value: IBizEjecucionEnCursoObra); procedure OnNewRecord(Sender: TDADataTable); override; public constructor Create(aDataTable: TDADataTable); override; destructor Destroy; override; function EsNuevo : Boolean; property Cliente : IBizCliente read GetCliente write SetCliente; property _Cliente : IBizCliente read _GetCliente write _SetCliente; property Ejecuciones: IBizEjecucionesObra read GetEjecuciones write SetEjecuciones; // property EjecucionEnCurso: IBizEjecucionEnCursoObra read GetEjecucionEnCurso write SetEjecucionEnCurso; property SeleccionableInterface : ISeleccionable read FSeleccionableInterface write FSeleccionableInterface implements ISeleccionable; end; implementation uses uFactuGES_App, DB, DateUtils, SysUtils, uDataTableUtils; { TBizEjecucionesCerradasObra } procedure TBizEjecucionesObra.BeforeInsert(Sender: TDADataTable); var AMasterTable : TDADataTable; begin inherited; AMasterTable := DataTable.GetMasterDataTable; if Assigned(AMasterTable) and (AMasterTable.State = dsInsert) then AMasterTable.Post; end; constructor TBizEjecucionesObra.Create(aDataTable: TDADataTable); begin inherited; FPresupuestos := NIL; FPresupuestosLink := TDADataSource.Create(NIL); FPresupuestosLink.DataTable := aDataTable; FPedidos := NIL; FPedidosLink := TDADataSource.Create(NIL); FPedidosLink.DataTable := aDataTable; end; destructor TBizEjecucionesObra.Destroy; begin FPresupuestos := NIL; FreeANDNIL(FPresupuestosLink); FPedidos := NIL; FreeANDNIL(FPedidosLink); inherited; end; function TBizEjecucionesObra.EnCurso: Boolean; begin Result := FECHA_FINIsNull; end; function TBizEjecucionesObra.EsNuevo: Boolean; begin Result := (ID < 0); end; function TBizEjecucionesObra.GetPedidos: IBizEjecucionPedidosProveedor; begin Result := FPedidos; end; function TBizEjecucionesObra.GetPresupuestos: IBizEjecucionPresupuestos; begin Result := FPresupuestos; end; procedure TBizEjecucionesObra.OnNewRecord(Sender: TDADataTable); begin inherited; FECHA_INICIO := DateOf(Now); end; procedure TBizEjecucionesObra.RecalcularBeneficio; begin Edit; IMPORTE_TOTAL := IMPORTE_INGRESOS - IMPORTE_GASTOS; end; procedure TBizEjecucionesObra.SetPedidos( Value: IBizEjecucionPedidosProveedor); begin FPedidos := Value; EnlazarMaestroDetalle(FPedidosLink, FPedidos); end; procedure TBizEjecucionesObra.SetPresupuestos(Value: IBizEjecucionPresupuestos); begin FPresupuestos := Value; EnlazarMaestroDetalle(FPresupuestosLink, FPresupuestos); end; {procedure TBizEjecucionesCerradasObra.SetSubcontrata(AValue: IBizProveedor); var bEnEdicion : Boolean; begin FSubcontrata := AValue; if Assigned(FSubcontrata) then begin if not FSubcontrata.DataTable.Active then FSubcontrata.DataTable.Active := True; if ID_SUBCONTRATA <> FSubcontrata.ID then begin bEnEdicion := (DataTable.State in dsEditModes); if not bEnEdicion then DataTable.Edit; ID_SUBCONTRATA := FSubcontrata.ID; DataTable.Post; //Muy importante ya que es necesario hacer un post de la cabecera antes de aņadir detalles //si se quita el id de la cabecera y los detalles se desincroniza if bEnEdicion then DataTable.Edit; end; end; end;} {function TBizEjecucionesCerradasObra._GetSubcontrata: IBizProveedor; begin Result := FSubcontrata; end; procedure TBizEjecucionesCerradasObra._SetSubcontrata(AValue: IBizProveedor); begin FSubcontrata := AValue; end;} { TBizEjecucionEnCursoObra } //procedure TBizEjecucionEnCursoObra.BeforeInsert(Sender: TDADataTable); //var // AMasterTable : TDADataTable; //begin // inherited; // AMasterTable := DataTable.GetMasterDataTable; // if Assigned(AMasterTable) and (AMasterTable.State = dsInsert) then // AMasterTable.Post; //end; // //constructor TBizEjecucionEnCursoObra.Create(aDataTable: TDADataTable); //begin // inherited; //// FSubcontrata := NIL; //end; // //destructor TBizEjecucionEnCursoObra.Destroy; //begin //// FSubcontrata := NIL; // inherited; //end; // //function TBizEjecucionEnCursoObra.EsNuevo: Boolean; //begin // Result := (ID < 0); //end; //{ //function TBizEjecucionEnCursoObra.GetSubcontrata: IBizProveedor; //begin // Result := FSubcontrata; //end;} // //procedure TBizEjecucionEnCursoObra.OnNewRecord(Sender: TDADataTable); //begin // inherited; // FECHA_INICIO := DateOf(Now); //end; {procedure TBizEjecucionEnCursoObra.SetSubcontrata(AValue: IBizProveedor); var bEnEdicion : Boolean; begin FSubcontrata := AValue; if Assigned(FSubcontrata) then begin if not FSubcontrata.DataTable.Active then FSubcontrata.DataTable.Active := True; if ID_SUBCONTRATA <> FSubcontrata.ID then begin bEnEdicion := (DataTable.State in dsEditModes); if not bEnEdicion then DataTable.Edit; ID_SUBCONTRATA := FSubcontrata.ID; DataTable.Post; //Muy importante ya que es necesario hacer un post de la cabecera antes de aņadir detalles //si se quita el id de la cabecera y los detalles se desincroniza if bEnEdicion then DataTable.Edit; end; end; end;} {function TBizEjecucionEnCursoObra._GetSubcontrata: IBizProveedor; begin Result := FSubcontrata; end;} {procedure TBizEjecucionEnCursoObra._SetSubcontrata(AValue: IBizProveedor); begin FSubcontrata := AValue; end;} { TBizObra } constructor TBizObra.Create(aDataTable: TDADataTable); begin inherited; FCliente := NIL; // FEjecucionEnCurso := NIL; // FEjecucionEnCursoLink := TDADataSource.Create(NIL); // FEjecucionEnCursoLink.DataTable := aDataTable; FEjecuciones := NIL; FEjecucionesLink := TDADataSource.Create(NIL); FEjecucionesLink.DataTable := aDataTable; FSeleccionableInterface := TSeleccionable.Create(aDataTable); end; destructor TBizObra.Destroy; begin FCliente := NIL; // FEjecucionEnCurso := NIL; // FreeANDNIL(FEjecucionEnCursoLink); FEjecuciones := NIL; FreeANDNIL(FEjecucionesLink); FSeleccionableInterface := NIL; inherited; end; function TBizObra.EsNuevo: Boolean; begin Result := (ID < 0); end; function TBizObra.GetCliente: IBizCliente; begin Result := FCliente; end; //function TBizObra.GetEjecucionEnCurso: IBizEjecucionEnCursoObra; //begin // Result := FEjecucionEnCurso; //end; function TBizObra.GetEjecuciones: IBizEjecucionesObra; begin Result := FEjecuciones; end; procedure TBizObra.OnNewRecord(Sender: TDADataTable); begin inherited; ID_EMPRESA := AppFactuGES.EmpresaActiva.ID; USUARIO := AppFactuGES.UsuarioActivo.UserName; end; procedure TBizObra.SetCliente(AValue: IBizCliente); var bEnEdicion : Boolean; begin FCliente := AValue; if Assigned(FCliente) then begin if not FCliente.DataTable.Active then FCliente.DataTable.Active := True; if ID_Cliente <> FCliente.ID then begin bEnEdicion := (DataTable.State in dsEditModes); if not bEnEdicion then DataTable.Edit; ID_CLIENTE := FCliente.ID; DataTable.Post; //Muy importante ya que es necesario hacer un post de la cabecera antes de aņadir detalles //si se quita el id de la cabecera y los detalles se desincroniza if bEnEdicion then DataTable.Edit; end; end; end; //procedure TBizObra.SetEjecucionEnCurso(Value: IBizEjecucionEnCursoObra); //begin // FEjecucionEnCurso := Value; // EnlazarMaestroDetalle(FEjecucionEnCursoLink, FEjecucionEnCurso); //end; procedure TBizObra.SetEjecuciones(Value: IBizEjecucionesObra); begin FEjecuciones := Value; EnlazarMaestroDetalle(FEjecucionesLink, FEjecuciones); end; function TBizObra._GetCliente: IBizCliente; begin Result := FCliente; end; procedure TBizObra._SetCliente(AValue: IBizCliente); begin FCliente := AValue; end; { TBizEjecucionPresupuestos } procedure TBizEjecucionPresupuestos.BeforeInsert(Sender: TDADataTable); var AMasterTable : TDADataTable; begin inherited; AMasterTable := DataTable.GetMasterDataTable; if Assigned(AMasterTable) and (AMasterTable.State = dsInsert) then AMasterTable.Post; end; function TBizEjecucionPresupuestos.EsNuevo: Boolean; begin Result := (ID < 0); end; { TBizEjecucionPedidosProveedor } procedure TBizEjecucionPedidosProveedor.BeforeInsert(Sender: TDADataTable); var AMasterTable : TDADataTable; begin inherited; AMasterTable := DataTable.GetMasterDataTable; if Assigned(AMasterTable) and (AMasterTable.State = dsInsert) then AMasterTable.Post; end; function TBizEjecucionPedidosProveedor.EsNuevo: Boolean; begin Result := (ID < 0); end; initialization RegisterDataTableRules(BIZ_CLIENT_OBRA, TBizObra); RegisterDataTableRules(BIz_CLIENT_OBRA_EJECUCION, TBizEjecucionesObra); // RegisterDataTableRules(BIz_CLIENT_OBRA_EJECUCIONES_CERRADAS, TBizEjecucionesCerradasObra); // RegisterDataTableRules(BIz_CLIENT_OBRA_EJECUCION_ENCURSO, TBizEjecucionEnCursoObra); RegisterDataTableRules(BIZ_CLIENT_OBRA_EJECUCION_PRESUPUESTO, TBizEjecucionPresupuestos); RegisterDataTableRules(BIZ_CLIENT_OBRA_EJECUCION_PEDIDO_PROVEEDOR, TBizEjecucionPedidosProveedor); finalization end.