unit uBizObraFinal; interface uses Controls, uDADataTable, uBizObra, uBizFacturasCliente, uBizRecibosCliente; const BIZ_OBRAFINAL = 'IBizObraFinal'; BIZ_FACTURASOBRAS = 'IBizFacturasObras'; BIZ_RECIBOSOBRAS = 'IBizRecibosObras'; type IBizObraFinal = Interface; //Se declara después IBizFacturasObras = interface(IBizFacturasCliente) ['{A1260299-841D-4664-86C0-7FB18B0245D8}'] function GetObra: IBizObraFinal; procedure SetObra(const Value: IBizObraFinal); property Obra: IBizObraFinal read GetObra write SetObra; end; IBizRecibosObras = interface(IBizRecibosCliente) ['{C530C195-1578-4509-82C3-CBB0C75CA548}'] function GetObra: IBizObraFinal; procedure SetObra(const Value: IBizObraFinal); property Obra: IBizObraFinal read GetObra write SetObra; end; IBizObraFinal = interface(IBizObra) ['{CB53EF43-54AF-42D7-8D9E-663CE8FBE2C0}'] function GetFacturas: IBizFacturasObras; procedure SetFacturas(const Value: IBizFacturasObras); property Facturas: IBizFacturasObras read GetFacturas write SetFacturas; function GetRecibos: IBizRecibosObras; procedure SetRecibos(const Value: IBizRecibosObras); property Recibos: IBizRecibosObras read GetRecibos write SetRecibos; function ShowForSelect : TModalResult; end; TBizObraFinal = class(TBizObraDataTableRules, IBizObraFinal) protected FFacturas: IBizFacturasObras; FRecibos: IBizRecibosObras; FCodigoObraFacturas : Integer; FCodigoObraRecibos : Integer; function GetFacturas: IBizFacturasObras; procedure SetFacturas(const Value: IBizFacturasObras); function GetRecibos: IBizRecibosObras; procedure SetRecibos(const Value: IBizRecibosObras); public property Facturas: IBizFacturasObras read GetFacturas write SetFacturas; property Recibos: IBizRecibosObras read GetRecibos write SetRecibos; function ShowForSelect : TModalResult; constructor Create(aDataTable: TDADataTable); override; end; TBizFacturasObras = class(TBizFacturasCliente, IBizFacturasObras) private FObra: IBizObraFinal; protected function GetObra: IBizObraFinal; procedure SetObra(const Value: IBizObraFinal); procedure OnNewRecord(Sender: TDADataTable); override; public property Obra: IBizObraFinal read GetObra write SetObra; procedure Show; override; end; TBizRecibosObras = class(TBizRecibosCliente, IBizRecibosObras) private FObra: IBizObraFinal; protected function GetObra: IBizObraFinal; procedure SetObra(const Value: IBizObraFinal); procedure OnNewRecord(Sender: TDADataTable); override; public property Obra: IBizObraFinal read GetObra write SetObra; procedure Show; override; end; implementation uses DB, Variants, uEditorUtils, schFacturasClienteClient_Intf, uDataModuleObrasFinal; { TBizFacturasObras } function TBizFacturasObras.GetObra: IBizObraFinal; begin if not Assigned(FObra) then FObra := dmObrasFinal.GetObraItem(CODIGOOBRA) else if (CODIGOOBRA <> FObra.Codigo) and not (FObra.DataTable.State in dsEditModes) then FObra := dmObrasFinal.GetObraItem(CODIGOOBRA); if not FObra.DataTable.Active then FObra.DataTable.Active := True; Result := FObra; end; procedure TBizFacturasObras.OnNewRecord(Sender: TDADataTable); begin inherited; CLASEFACTURA := CTE_NORMAL; PAGADA := SITUACION_PENDIENTE; setReferencia(CTE_NORMAL); end; procedure TBizFacturasObras.SetObra(const Value: IBizObraFinal); var bEnEdicion : Boolean; begin bEnEdicion := (DataTable.State in dsEditModes); if not bEnEdicion then Edit; FObra := Value; if Assigned(FObra) then begin CODIGOOBRA := FObra.CODIGO; Cliente := FObra.Cliente; Post; if bEnEdicion then Edit; end end; procedure TBizFacturasObras.Show; begin //inherited; ShowEditor(IBizFacturasObras, Self, etItem); end; { TBizObraFinal } constructor TBizObraFinal.Create(aDataTable: TDADataTable); begin inherited; FCodigoObraFacturas := -1; FCodigoObraRecibos := -1; end; function TBizObraFinal.GetFacturas: IBizFacturasObras; begin if (not Assigned(FFacturas)) or (CODIGO <> FCodigoObraFacturas) then begin FCodigoObraFacturas := CODIGO; FFacturas := dmObrasFinal.GetFacturasItems(FCodigoObraFacturas) end; Result := FFacturas; end; function TBizObraFinal.GetRecibos: IBizRecibosObras; begin if (not Assigned(FRecibos)) or (CODIGO <> FCodigoObraRecibos) then begin FCodigoObraRecibos := CODIGO; FRecibos := dmObrasFinal.GetRecibosItems(FCodigoObraRecibos) end; Result := FRecibos; end; procedure TBizObraFinal.SetFacturas(const Value: IBizFacturasObras); begin FFacturas := Value; end; procedure TBizObraFinal.SetRecibos(const Value: IBizRecibosObras); begin FRecibos := Value; end; function TBizObraFinal.ShowForSelect: TModalResult; begin Result := ShowEditor(IBizObraFinal, Self, etSelectItem); end; { TBizRecibosObras } function TBizRecibosObras.GetObra: IBizObraFinal; begin if not Assigned(FObra) then FObra := dmObrasFinal.GetObraItem(CODIGOOBRA) else if (CODIGOOBRA <> FObra.Codigo) and not (FObra.DataTable.State in dsEditModes) then FObra := dmObrasFinal.GetObraItem(CODIGOOBRA); if not FObra.DataTable.Active then FObra.DataTable.Active := True; Result := FObra; end; procedure TBizRecibosObras.OnNewRecord(Sender: TDADataTable); begin inherited; // end; procedure TBizRecibosObras.SetObra(const Value: IBizObraFinal); var bEnEdicion : Boolean; begin bEnEdicion := (DataTable.State in dsEditModes); if not bEnEdicion then Edit; FObra := Value; if Assigned(FObra) then begin CODIGOOBRA := FObra.CODIGO; Cliente := FObra.Cliente; Post; if bEnEdicion then Edit; end end; procedure TBizRecibosObras.Show; begin //inherited; ShowEditor(IBizRecibosObras, Self, etItem); end; initialization RegisterDataTableRules(BIZ_OBRAFINAL, TBizObraFinal); RegisterDataTableRules(BIZ_FACTURASOBRAS, TBizFacturasObras); RegisterDataTableRules(BIZ_RECIBOSOBRAS, TBizRecibosObras); finalization end.