|
@@ -6,6 +6,8 @@ uses
|
|
|
sdIDTree, sdDB, mDataRecord;
|
|
|
|
|
|
type
|
|
|
+ TReCalculateTreeNode = procedure(AID: Integer) of Object;
|
|
|
+
|
|
|
TBillsIDTreeNode = class(TsdIDTreeNode)
|
|
|
private
|
|
|
FDealQuantity: Double;
|
|
@@ -57,6 +59,7 @@ type
|
|
|
TBillsIDTree = class(TsdIDTree)
|
|
|
private
|
|
|
FDoOnAfterDeleteNode: TbitAfterDeleteNode;
|
|
|
+ FOnReCalcParent: TReCalculateTreeNode;
|
|
|
protected
|
|
|
function CreateItem: TsdIDTreeNode; override;
|
|
|
public
|
|
@@ -64,8 +67,10 @@ 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;
|
|
|
end;
|
|
|
|
|
|
TEstimateIDTreeNode = class(TsdIDTreeNode)
|
|
@@ -120,6 +125,12 @@ begin
|
|
|
FDoOnAfterDeleteNode(vParent);
|
|
|
end;
|
|
|
|
|
|
+procedure TBillsIDTree.DoOnReCalcParent(AID: Integer);
|
|
|
+begin
|
|
|
+ if Assigned(FOnReCalcParent) then
|
|
|
+ FOnReCalcParent(AID);
|
|
|
+end;
|
|
|
+
|
|
|
{ TBillsIDTreeNode }
|
|
|
|
|
|
function TBillsIDTreeNode.CanDownLevel: Boolean;
|
|
@@ -172,15 +183,25 @@ begin
|
|
|
end;
|
|
|
|
|
|
function TBillsIDTreeNode.DownLevel: Boolean;
|
|
|
+var
|
|
|
+ iOrgParentID: Integer;
|
|
|
begin
|
|
|
+ iOrgParentID := ParentID;
|
|
|
Result := inherited DownLevel;
|
|
|
|
|
|
+ if not Result then Exit;
|
|
|
// 如升级后变为父项,则清空数量、单价
|
|
|
if Assigned(Parent) then
|
|
|
begin
|
|
|
+ Parent.Rec.ValueByName('OrgQuantity').AsFloat := 0;
|
|
|
+ Parent.Rec.ValueByName('MisQuantity').AsFloat := 0;
|
|
|
+ Parent.Rec.ValueByName('OthQuantity').AsFloat := 0;
|
|
|
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;
|
|
@@ -239,15 +260,25 @@ begin
|
|
|
end;
|
|
|
|
|
|
function TBillsIDTreeNode.UpLevel: Boolean;
|
|
|
+var
|
|
|
+ iOrgParentID: Integer;
|
|
|
begin
|
|
|
+ iOrgParentID := ParentID;
|
|
|
Result := inherited UpLevel;
|
|
|
|
|
|
+ if not Result then Exit;
|
|
|
// 如升级后变为父项,则清空数量、单价
|
|
|
if HasChildren then
|
|
|
begin
|
|
|
+ Rec.ValueByName('OrgQuantity').AsFloat := 0;
|
|
|
+ Rec.ValueByName('MisQuantity').AsFloat := 0;
|
|
|
+ Rec.ValueByName('OthQuantity').AsFloat := 0;
|
|
|
Rec.ValueByName('Quantity').AsFloat := 0;
|
|
|
Rec.ValueByName('Price').AsFloat := 0;
|
|
|
end;
|
|
|
+
|
|
|
+ TBillsIDTree(Owner).OnReCalcParent(iOrgParentID);
|
|
|
+ TBillsIDTree(Owner).OnReCalcParent(ParentID);
|
|
|
end;
|
|
|
|
|
|
{ TEstimateIDTreeNode }
|