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.