|
@@ -64,6 +64,8 @@ type
|
|
|
TReCalculateNode = procedure(AID: Integer) of object;
|
|
|
|
|
|
TBillsIDTree = class(TsdIDTree)
|
|
|
+ private
|
|
|
+ function GetNewID(AID: Integer = -1): Integer;
|
|
|
protected
|
|
|
function CreateItem: TsdIDTreeNode; override;
|
|
|
public
|
|
@@ -71,6 +73,7 @@ type
|
|
|
function DeleteNode(ANode: TsdIDTreeNode): Boolean; override;
|
|
|
|
|
|
function Add(AParentID, ANextSiblingID: TsdTreeNodeID): TsdIDTreeNode; override;
|
|
|
+ function AddNode(AParentID, ANextSiblingID: TsdTreeNodeID; AID: Integer = -1): TsdIDTreeNode;
|
|
|
|
|
|
procedure RecodeChildrenCode(ANode: TBillsIDTreeNode; AOrgCode, ANewCode: string);
|
|
|
procedure RecodeChildrenB_Code(ANode: TBillsIDTreeNode; AOrgCode, ANewCode: string);
|
|
@@ -121,7 +124,7 @@ type
|
|
|
|
|
|
implementation
|
|
|
|
|
|
-uses SysUtils;
|
|
|
+uses SysUtils, UtilMethods;
|
|
|
|
|
|
{ TBillsIDTree }
|
|
|
|
|
@@ -135,10 +138,40 @@ begin
|
|
|
Result := inherited Add(AParentID, ANextSiblingID);
|
|
|
end;
|
|
|
|
|
|
+function TBillsIDTree.AddNode(AParentID, ANextSiblingID: TsdTreeNodeID;
|
|
|
+ AID: Integer): TsdIDTreeNode;
|
|
|
+var
|
|
|
+ iID: Integer;
|
|
|
+ Rec: TsdDataRecord;
|
|
|
+begin
|
|
|
+ if not (Assigned(DataView) and DataView.Active){Active} then
|
|
|
+ begin
|
|
|
+ WarningMessage('无法在一个关闭的数据集上执行该操作');
|
|
|
+ Exit;
|
|
|
+ end;
|
|
|
+ Result := nil;
|
|
|
+
|
|
|
+ if CanAdd(AParentID, ANextSiblingID) then
|
|
|
+ begin
|
|
|
+ Rec := DataView.Append(True);
|
|
|
+ try
|
|
|
+ Rec.AddValue(ParentField, AParentID);
|
|
|
+ Rec.AddValue(NextSiblingField, ANextSiblingID);
|
|
|
+ iID := GetNewID(AID);
|
|
|
+ if AutoCreateKeyID then
|
|
|
+ Rec.AddValue(KeyField, iID);
|
|
|
+ InitDBRecord(Rec);
|
|
|
+ finally
|
|
|
+ Rec.EndUpdate;
|
|
|
+ end;
|
|
|
+ Result := Add(iID, AParentID, ANextSiblingID, Rec);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
function TBillsIDTree.CanDelete(ANode: TsdIDTreeNode): Boolean;
|
|
|
begin
|
|
|
Result := Inherited CanDelete(ANode)
|
|
|
- and (ANode.ID >= 100)
|
|
|
+ and ((ANode.ID >= 100) or (ANode.Level > 0))
|
|
|
and (not ANode.Rec.ValueByName('LockedLevel').AsBoolean)
|
|
|
and (ANode.Rec.ValueByName('AddDealQuantity').AsFloat = 0)
|
|
|
and (ANode.Rec.ValueByName('AddDealTotalPrice').AsFloat = 0)
|
|
@@ -162,6 +195,17 @@ begin
|
|
|
DoOnReCalcNode(vParent);
|
|
|
end;
|
|
|
|
|
|
+function TBillsIDTree.GetNewID(AID: Integer): Integer;
|
|
|
+var
|
|
|
+ vNode: TsdIDTreeNode;
|
|
|
+begin
|
|
|
+ vNode := FindNode(AID);
|
|
|
+ if Assigned(vNode) then
|
|
|
+ Result := NextNewID
|
|
|
+ else
|
|
|
+ Result := AID;
|
|
|
+end;
|
|
|
+
|
|
|
procedure TBillsIDTree.RecodeChildrenB_Code(ANode: TBillsIDTreeNode;
|
|
|
AOrgCode, ANewCode: string);
|
|
|
var
|