Tecsitel_FactuGES2/Source/Modulos/Obras/Model/uBizObras.pas
david 816a4a38c4 Obras:
- preguntar fecha de cierre de una ejecución
 - mejorado el editor

git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@716 0c75b7a4-871f-7646-8a2f-f78d34cc349f
2008-10-31 15:48:27 +00:00

571 lines
17 KiB
ObjectPascal
Raw Blame History

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.