MaiXinRong 6 年之前
父節點
當前提交
14aa958e08
共有 1 個文件被更改,包括 135 次插入0 次删除
  1. 135 0
      Units/BillsPosTree.pas

+ 135 - 0
Units/BillsPosTree.pas

@@ -0,0 +1,135 @@
+unit BillsPosTree;
+// 清单--部位明细树 (同导入计量Saas相关,不做他用)
+
+interface
+
+uses
+  Classes, CacheTree, ZhAPI;
+
+type
+  TPosNode = class
+  private
+    FQuantity: Double;
+    FMemoStr: string;
+    FName: string;
+  public
+    property Name: string read FName write FName;
+    property Quantity: Double read FQuantity write FQuantity;
+    property MemoStr: string read FMemoStr write FMemoStr;
+  end;
+
+  TBillsPosTreeNode = class(TCacheNode)
+  private
+    FPosList: TList;
+
+    FQuantity: Double;
+    FPrice: Double;
+    FDgnQty1: Double;
+    FDgnQty2: Double;
+    FUnits: string;
+    FDrawingCode: string;
+    FName: string;
+    FCode: string;
+    FMemoStr: string;
+    FB_Code: string;
+    FTotalPrice: Double;
+    function GetPos(AIndex: Integer): TPosNode;
+    function GetPosCount: Integer;
+  public
+    constructor Create(ACacheTree: TCacheTree; AID: Integer); override;
+    destructor Destroy; override;
+
+    function AddPos: TPosNode;
+    procedure Calculate;
+
+    property Code: string read FCode write FCode;
+    property B_Code: string read FB_Code write FB_Code;
+    property Name: string read FName write FName;
+    property Units: string read FUnits write FUnits;
+    property Price: Double read FPrice write FPrice;
+    property Quantity: Double read FQuantity write FQuantity;
+    property TotalPrice: Double read FTotalPrice write FTotalPrice;
+    property DgnQty1: Double read FDgnQty1 write FDgnQty1;
+    property DgnQty2: Double read FDgnQty2 write FDgnQty2;
+    property DrawingCode: string read FDrawingCode write FDrawingCode;
+    property MemoStr: string read FMemoStr write FMemoStr;
+
+    property PosCount: Integer read GetPosCount;
+    property Pos[AIndex: Integer]: TPosNode read GetPos;
+  end;
+
+  TBillsPosTree = class(TCacheTree)
+  private
+  protected
+    function GetNewNode: TCacheNode; override;
+  public
+    procedure CalculateAll;
+  end;
+
+implementation
+
+{ TBillsPosTreeNode }
+
+function TBillsPosTreeNode.AddPos: TPosNode;
+begin
+  Result := TPosNode.Create;
+  FPosList.Add(Result);
+end;
+
+procedure TBillsPosTreeNode.Calculate;
+var
+  fQuantity: Double;
+  iPos: Integer;
+begin
+  fQuantity := 0;
+  for iPos := 0 to FPosList.Count - 1 do
+    fQuantity := fQuantity + TPosNode(FPosList.Items[iPos]).Quantity;
+  Quantity := fQuantity;
+  TotalPrice := Quantity * Price;
+end;
+
+constructor TBillsPosTreeNode.Create(ACacheTree: TCacheTree; AID: Integer);
+begin
+  inherited;
+  FPosList := TList.Create;
+end;
+
+destructor TBillsPosTreeNode.Destroy;
+begin
+  ClearObjects(FPosList);
+  FPosList.Free;
+  inherited;
+end;
+
+function TBillsPosTreeNode.GetPos(AIndex: Integer): TPosNode;
+begin
+  Result := TPosNode(FPosList.Items[AIndex]);
+end;
+
+function TBillsPosTreeNode.GetPosCount: Integer;
+begin
+  Result := FPosList.Count;
+end;
+
+{ TBillsPosTree }
+
+procedure TBillsPosTree.CalculateAll;
+var
+  i: Integer;
+  vNode: TBillsPosTreeNode;
+begin
+  for i := 0 to CacheNodes.Count - 1 do
+  begin
+    vNode := TBillsPosTreeNode(CacheNodes[i]);
+    if (vNode.PosCount > 0) then
+      vNode.Calculate;
+  end;
+end;
+
+function TBillsPosTree.GetNewNode: TCacheNode;
+begin
+  Result := TBillsPosTreeNode.Create(Self, GetNewNodeID);
+  CacheNodes.Add(Result);
+end;
+
+end.