|
@@ -6,8 +6,6 @@ uses
|
|
|
sdIDTree, sdDB, mDataRecord;
|
|
|
|
|
|
type
|
|
|
- TReCalculateTreeNode = procedure(AID: Integer) of Object;
|
|
|
-
|
|
|
TBillsIDTreeNode = class(TsdIDTreeNode)
|
|
|
private
|
|
|
FDealQuantity: Double;
|
|
@@ -19,8 +17,6 @@ type
|
|
|
FGatherTotalPrice: Double;
|
|
|
FGatherQuantity: Double;
|
|
|
|
|
|
- FStageRec: TStageRecord;
|
|
|
-
|
|
|
function HasCountPrice: Boolean;
|
|
|
function HasTotalPrice: Boolean;
|
|
|
|
|
@@ -50,16 +46,11 @@ type
|
|
|
property PcTotalPrice: Double read FPcTotalPrice write FPcTotalPrice;
|
|
|
property GatherQuantity: Double read FGatherQuantity write FGatherQuantity;
|
|
|
property GatherTotalPrice: Double read FGatherTotalPrice write FGatherTotalPrice;
|
|
|
- // Cache Data
|
|
|
- property StageRec: TStageRecord read FStageRec write FStageRec;
|
|
|
end;
|
|
|
|
|
|
- TbitAfterDeleteNode = procedure (AParent: TsdIDTreeNode) of object;
|
|
|
+ TReCalculateNode = procedure(AID: Integer) of object;
|
|
|
|
|
|
TBillsIDTree = class(TsdIDTree)
|
|
|
- private
|
|
|
- FDoOnAfterDeleteNode: TbitAfterDeleteNode;
|
|
|
- FOnReCalcParent: TReCalculateTreeNode;
|
|
|
protected
|
|
|
function CreateItem: TsdIDTreeNode; override;
|
|
|
public
|
|
@@ -67,10 +58,50 @@ type
|
|
|
function DeleteNode(ANode: TsdIDTreeNode): Boolean; override;
|
|
|
|
|
|
function Add(AParentID, ANextSiblingID: TsdTreeNodeID): TsdIDTreeNode; override;
|
|
|
- procedure DoOnReCalcParent(AID: Integer);
|
|
|
|
|
|
- property DoOnAfterDeleteNode: TbitAfterDeleteNode read FDoOnAfterDeleteNode write FDoOnAfterDeleteNode;
|
|
|
- property OnReCalcParent: TReCalculateTreeNode read FOnReCalcParent write FOnReCalcParent;
|
|
|
+ procedure DoOnReCalcNode(AID: Integer); overload; virtual; abstract;
|
|
|
+ procedure DoOnReCalcNode(ANode: TsdIDTreeNode); overload; virtual; abstract;
|
|
|
+ end;
|
|
|
+
|
|
|
+ TCompileBillsIDTreeNode = class(TBillsIDTreeNode)
|
|
|
+ public
|
|
|
+ function UpLevel: Boolean; override;
|
|
|
+ function DownLevel: Boolean; override;
|
|
|
+ end;
|
|
|
+
|
|
|
+ TCompileBillsIDTree = class(TBillsIDTree)
|
|
|
+ private
|
|
|
+ FOnReCalcNode: TReCalculateNode;
|
|
|
+ protected
|
|
|
+ function CreateItem: TsdIDTreeNode; override;
|
|
|
+ public
|
|
|
+ procedure DoOnReCalcNode(AID: Integer); overload;
|
|
|
+ procedure DoOnReCalcNode(ANode: TsdIDTreeNode); overload;
|
|
|
+
|
|
|
+ property OnReCalcNode: TReCalculateNode read FOnReCalcNode write FOnReCalcNode;
|
|
|
+ end;
|
|
|
+
|
|
|
+ TMeasureBillsIDTreeNode = class(TBillsIDTreeNode)
|
|
|
+ private
|
|
|
+ FStageRec: TStageRecord;
|
|
|
+ public
|
|
|
+ function UpLevel: Boolean; override;
|
|
|
+ function DownLevel: Boolean; override;
|
|
|
+
|
|
|
+ // Cache Data
|
|
|
+ property StageRec: TStageRecord read FStageRec write FStageRec;
|
|
|
+ end;
|
|
|
+
|
|
|
+ TMeasureBillsIDTree = class(TBillsIDTree)
|
|
|
+ private
|
|
|
+ FCompileTree: TCompileBillsIDTree;
|
|
|
+ protected
|
|
|
+ function CreateItem: TsdIDTreeNode; override;
|
|
|
+ public
|
|
|
+ procedure DoOnReCalcNode(AID: Integer); overload;
|
|
|
+ procedure DoOnReCalcNode(ANode: TsdIDTreeNode); overload;
|
|
|
+
|
|
|
+ property CompileTree: TCompileBillsIDTree read FCompileTree write FCompileTree;
|
|
|
end;
|
|
|
|
|
|
TEstimateIDTreeNode = class(TsdIDTreeNode)
|
|
@@ -121,14 +152,7 @@ var
|
|
|
begin
|
|
|
vParent := ANode.Parent;
|
|
|
Result := inherited DeleteNode(ANode);
|
|
|
- if Assigned(FDoOnAfterDeleteNode) then
|
|
|
- FDoOnAfterDeleteNode(vParent);
|
|
|
-end;
|
|
|
-
|
|
|
-procedure TBillsIDTree.DoOnReCalcParent(AID: Integer);
|
|
|
-begin
|
|
|
- if Assigned(FOnReCalcParent) then
|
|
|
- FOnReCalcParent(AID);
|
|
|
+ DoOnReCalcNode(vParent);
|
|
|
end;
|
|
|
|
|
|
{ TBillsIDTreeNode }
|
|
@@ -183,10 +207,7 @@ begin
|
|
|
end;
|
|
|
|
|
|
function TBillsIDTreeNode.DownLevel: Boolean;
|
|
|
-var
|
|
|
- iOrgParentID: Integer;
|
|
|
begin
|
|
|
- iOrgParentID := ParentID;
|
|
|
Result := inherited DownLevel;
|
|
|
|
|
|
if not Result then Exit;
|
|
@@ -199,9 +220,6 @@ begin
|
|
|
Parent.Rec.ValueByName('Quantity').AsFloat := 0;
|
|
|
Parent.Rec.ValueByName('Price').AsFloat := 0;
|
|
|
end;
|
|
|
-
|
|
|
- TBillsIDTree(Owner).OnReCalcParent(ParentID);
|
|
|
- TBillsIDTree(Owner).OnReCalcParent(iOrgParentID);
|
|
|
end;
|
|
|
|
|
|
function TBillsIDTreeNode.GetRec: TBillsRecord;
|
|
@@ -260,10 +278,7 @@ begin
|
|
|
end;
|
|
|
|
|
|
function TBillsIDTreeNode.UpLevel: Boolean;
|
|
|
-var
|
|
|
- iOrgParentID: Integer;
|
|
|
begin
|
|
|
- iOrgParentID := ParentID;
|
|
|
Result := inherited UpLevel;
|
|
|
|
|
|
if not Result then Exit;
|
|
@@ -276,9 +291,6 @@ begin
|
|
|
Rec.ValueByName('Quantity').AsFloat := 0;
|
|
|
Rec.ValueByName('Price').AsFloat := 0;
|
|
|
end;
|
|
|
-
|
|
|
- TBillsIDTree(Owner).OnReCalcParent(iOrgParentID);
|
|
|
- TBillsIDTree(Owner).OnReCalcParent(ParentID);
|
|
|
end;
|
|
|
|
|
|
{ TEstimateIDTreeNode }
|
|
@@ -308,4 +320,94 @@ begin
|
|
|
Result := TEstimateIDTreeNode.Create(Self);
|
|
|
end;
|
|
|
|
|
|
+{ TCompileBillsIDTree }
|
|
|
+
|
|
|
+procedure TCompileBillsIDTree.DoOnReCalcNode(AID: Integer);
|
|
|
+begin
|
|
|
+ if (AID <> -1) and Assigned(FOnReCalcNode) then
|
|
|
+ FOnReCalcNode(AID);
|
|
|
+end;
|
|
|
+
|
|
|
+function TCompileBillsIDTree.CreateItem: TsdIDTreeNode;
|
|
|
+begin
|
|
|
+ Result := TCompileBillsIDTreeNode.Create(Self);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TCompileBillsIDTree.DoOnReCalcNode(ANode: TsdIDTreeNode);
|
|
|
+begin
|
|
|
+ if Assigned(ANode) then
|
|
|
+ DoOnReCalcNode(ANode.ID);
|
|
|
+end;
|
|
|
+
|
|
|
+{ TMeasureBillsIDTree }
|
|
|
+
|
|
|
+procedure TMeasureBillsIDTree.DoOnReCalcNode(AID: Integer);
|
|
|
+begin
|
|
|
+ if Assigned(FCompileTree) then
|
|
|
+ FCompileTree.DoOnReCalcNode(AID);
|
|
|
+end;
|
|
|
+
|
|
|
+function TMeasureBillsIDTree.CreateItem: TsdIDTreeNode;
|
|
|
+begin
|
|
|
+ Result := TMeasureBillsIDTreeNode.Create(Self);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TMeasureBillsIDTree.DoOnReCalcNode(ANode: TsdIDTreeNode);
|
|
|
+begin
|
|
|
+ if Assigned(FCompileTree) then
|
|
|
+ FCompileTree.DoOnReCalcNode(ANode);
|
|
|
+end;
|
|
|
+
|
|
|
+{ TCompileBillsIDTreeNode }
|
|
|
+
|
|
|
+function TCompileBillsIDTreeNode.DownLevel: Boolean;
|
|
|
+var
|
|
|
+ iOrgParentID: Integer;
|
|
|
+begin
|
|
|
+ iOrgParentID := ParentID;
|
|
|
+ Result := inherited DownLevel;
|
|
|
+
|
|
|
+ if not Result then Exit;
|
|
|
+ TCompileBillsIDTree(Owner).DoOnReCalcNode(ParentID);
|
|
|
+ TCompileBillsIDTree(Owner).DoOnReCalcNode(iOrgParentID);
|
|
|
+end;
|
|
|
+
|
|
|
+function TCompileBillsIDTreeNode.UpLevel: Boolean;
|
|
|
+var
|
|
|
+ iOrgParentID: Integer;
|
|
|
+begin
|
|
|
+ iOrgParentID := ParentID;
|
|
|
+ Result := inherited UpLevel;
|
|
|
+
|
|
|
+ if not Result then Exit;
|
|
|
+ TCompileBillsIDTree(Owner).DoOnReCalcNode(iOrgParentID);
|
|
|
+ TCompileBillsIDTree(Owner).DoOnReCalcNode(ParentID);
|
|
|
+end;
|
|
|
+
|
|
|
+{ TMeasureBillsIDTreeNode }
|
|
|
+
|
|
|
+function TMeasureBillsIDTreeNode.DownLevel: Boolean;
|
|
|
+var
|
|
|
+ iOrgParentID: Integer;
|
|
|
+begin
|
|
|
+ iOrgParentID := ParentID;
|
|
|
+ Result := inherited DownLevel;
|
|
|
+
|
|
|
+ if not Result then Exit;
|
|
|
+ TMeasureBillsIDTree(Owner).DoOnReCalcNode(ParentID);
|
|
|
+ TMeasureBillsIDTree(Owner).DoOnReCalcNode(iOrgParentID);
|
|
|
+end;
|
|
|
+
|
|
|
+function TMeasureBillsIDTreeNode.UpLevel: Boolean;
|
|
|
+var
|
|
|
+ iOrgParentID: Integer;
|
|
|
+begin
|
|
|
+ iOrgParentID := ParentID;
|
|
|
+ Result := inherited UpLevel;
|
|
|
+
|
|
|
+ if not Result then Exit;
|
|
|
+ TMeasureBillsIDTree(Owner).DoOnReCalcNode(iOrgParentID);
|
|
|
+ TMeasureBillsIDTree(Owner).DoOnReCalcNode(ParentID);
|
|
|
+end;
|
|
|
+
|
|
|
end.
|