ConstruccionesCNJ_FactuGES/Modulos/Montaje con detalles/Model/uBizMontajesDetalles.pas
2007-06-21 15:50:59 +00:00

176 lines
5.0 KiB
ObjectPascal

unit uBizMontajesDetalles;
interface
uses
uDAInterfaces, uDADataTable, schMontajesClient_Intf,
uBizContactos,
uBizMontajes, uBizPresupuestos, Classes, uDBSelectionListUtils;
const
BIZ_CLIENT_MONTAJE_DETALLES = 'Client.Montaje.Detalles';
BIZ_CLIENT_DETALLES_MONTAJE = 'Client.DetallesMontaje';
type
IBizDetallesMontaje = interface(IMontajes_Detalles)
['{053FA316-8E38-470F-ABBE-B9534112D0D6}']
function EsNuevo: Boolean;
end;
IBizMontajeDetalles = interface(IBizMontaje)
['{0E5E7B4C-3FBF-45BF-B5F7-170DB6A906C5}']
function GetDetalles: IBizDetallesMontaje;
procedure SetDetalles(Value: IBizDetallesMontaje);
property Detalles: IBizDetallesMontaje read GetDetalles write SetDetalles;
procedure SetPresupuesto(AValue : IBizPresupuesto);
function GetPresupuesto : IBizPresupuesto;
property Presupuesto : IBizPresupuesto read GetPresupuesto write SetPresupuesto;
end;
//Clase de negocio de los detalles del montaje
TBizDetallesMontaje = class(TMontajes_DetallesDataTableRules, IBizDetallesMontaje)
private
FContadorID: Integer;
protected
procedure OnNewRecord(Sender: TDADataTable); override;
public
function EsNuevo: Boolean;
constructor Create(aDataTable: TDADataTable); override;
end;
//Clase de negocio de montajes a los que le añadimos detalles
TBizMontajeDetalles = class(TBizMontaje, IBizMontajeDetalles)
protected
FPresupuesto : IBizPresupuesto;
FDetalles : IBizDetallesMontaje;
FDetallesLink : TDADataSource;
function GetDetalles: IBizDetallesMontaje;
procedure SetDetalles(Value: IBizDetallesMontaje);
procedure SetPresupuesto(AValue : IBizPresupuesto);
function GetPresupuesto : IBizPresupuesto;
public
property Presupuesto : IBizPresupuesto read GetPresupuesto write SetPresupuesto;
property Detalles: IBizDetallesMontaje read GetDetalles write SetDetalles;
constructor Create(aDataTable: TDADataTable); override;
destructor Destroy; override;
end;
implementation
uses
SysUtils, uDataTableUtils, DB, uDateUtils, DateUtils, uDataModuleUsuarios,
Variants, cxDateUtils, Forms, Windows;
{ TBizMontajeDetalles }
constructor TBizMontajeDetalles.Create(aDataTable: TDADataTable);
begin
inherited;
FPresupuesto := Nil;
FDetallesLink := TDADataSource.Create(NIL);
FDetallesLink.DataTable := aDataTable;
end;
destructor TBizMontajeDetalles.Destroy;
begin
FPresupuesto := Nil;
FDetalles := NIL;
FDetallesLink.Free;
inherited;
end;
function TBizMontajeDetalles.GetDetalles: IBizDetallesMontaje;
begin
Result := FDetalles;
end;
function TBizMontajeDetalles.GetPresupuesto: IBizPresupuesto;
begin
Result := FPresupuesto;
end;
procedure TBizMontajeDetalles.SetDetalles(Value: IBizDetallesMontaje);
begin
FDetalles := Value;
EnlazarMaestroDetalle(FDetallesLink, FDetalles);
end;
procedure TBizMontajeDetalles.SetPresupuesto(AValue: IBizPresupuesto);
begin
FPresupuesto := AValue;
if Assigned(FPresupuesto) then
begin
if not FPresupuesto.DataTable.Active then
FPresupuesto.DataTable.Active := True;
if ID_PRESUPUESTO <> FPresupuesto.ID then
begin
DataTable.Edit;
ID_PRESUPUESTO := FPresupuesto.ID;
REFERENCIA := FPresupuesto.REFERENCIA;
if (Application.MessageBox('¿Desea asignar los conceptos del presupuesto a los del montaje?', 'Atención', MB_YESNO) = IDYES) then
begin
IMPORTE_TOTAL := FPresupuesto.IMPORTE_TOTAL;
if Assigned(FPresupuesto.Detalles) then
begin
//Copiamos los detalles del presupuesto
with FPresupuesto.Detalles do
begin
//Borramos los que tuviera antes
Detalles.DataTable.ClearRows;
DataTable.First;
while not DataTable.EOF do
begin
Detalles.Insert;
Detalles.POSICION := POSICION;
Detalles.TIPO_DETALLE := TIPO_DETALLE;
Detalles.CONCEPTO := CONCEPTO;
Detalles.CANTIDAD := CANTIDAD;
Detalles.DESCUENTO := DESCUENTO;
Detalles.IMPORTE_UNIDAD := IMPORTE_UNIDAD;
Detalles.IMPORTE_TOTAL := IMPORTE_TOTAL;
Detalles.Post;
DataTable.Next;
end;
end;
end;
end;
end;
end;
end;
{ TBizDetallesMontaje }
constructor TBizDetallesMontaje.Create(aDataTable: TDADataTable);
begin
inherited Create(aDataTable);
FContadorID := -1;
end;
function TBizDetallesMontaje.EsNuevo: Boolean;
begin
Result := (ID < 0);
end;
procedure TBizDetallesMontaje.OnNewRecord(Sender: TDADataTable);
begin
inherited;
ID := FContadorID; // -1, -2, -3...
Dec(FContadorID);
end;
initialization
RegisterDataTableRules(BIZ_CLIENT_MONTAJE_DETALLES, TBizMontajeDetalles);
RegisterDataTableRules(BIZ_CLIENT_DETALLES_MONTAJE, TBizDetallesMontaje);
finalization
end.