|
@@ -25,7 +25,7 @@ type
|
|
|
private
|
|
|
FProjectData: TObject;
|
|
|
FBillsData: TBillsData;
|
|
|
- FBillsMeasureTree: TBillsIDTree;
|
|
|
+ FBillsMeasureTree: TMeasureBillsIDTree;
|
|
|
|
|
|
FFormulaCalc: TFormulaCalc;
|
|
|
FShowParentData: Boolean;
|
|
@@ -39,7 +39,7 @@ type
|
|
|
function SelectAndUpdateBGL(ABillsID: Integer; ARec: TsdDataRecord;
|
|
|
ANewValue: Double; const AType: string): Boolean;
|
|
|
|
|
|
- procedure CalculateNode(ANode: TBillsIDTreeNode);
|
|
|
+ procedure CalculateNode(ANode: TMeasureBillsIDTreeNode);
|
|
|
procedure UpdateRecordGather(ANode: TsdIDTreeNode; AQuantity, ATotalPrice: Double);
|
|
|
|
|
|
function GetStageData: TStageData;
|
|
@@ -73,7 +73,7 @@ type
|
|
|
|
|
|
property ProjectData: TObject read FProjectData;
|
|
|
property BillsData: TBillsData read FBillsData;
|
|
|
- property BillsMeasureTree: TBillsIDTree read FBillsMeasureTree;
|
|
|
+ property BillsMeasureTree: TMeasureBillsIDTree read FBillsMeasureTree;
|
|
|
|
|
|
property StageData: TStageData read GetStageData;
|
|
|
property ShowParentData: Boolean read FShowParentData write FShowParentData;
|
|
@@ -84,7 +84,7 @@ implementation
|
|
|
|
|
|
uses
|
|
|
ProjectData, PhaseData, Math, ZhAPI, BillsCommand, BGLSelectFrm,
|
|
|
- BGLDm, UtilMethods, mDataRecord, ConstUnit;
|
|
|
+ BGLDm, UtilMethods, mDataRecord, ConstUnit, Variants;
|
|
|
|
|
|
{$R *.dfm}
|
|
|
|
|
@@ -95,7 +95,7 @@ begin
|
|
|
inherited Create(nil);
|
|
|
FProjectData := AProjectData;
|
|
|
FBillsData := TProjectData(FProjectData).BillsData;
|
|
|
- FBillsMeasureTree := TBillsIDTree.Create;
|
|
|
+ FBillsMeasureTree := TMeasureBillsIDTree.Create;
|
|
|
FBillsMeasureTree.KeyFieldName := 'ID';
|
|
|
FBillsMeasureTree.ParentFieldName := 'ParentID';
|
|
|
FBillsMeasureTree.NextSiblingFieldName := 'NextSiblingID';
|
|
@@ -104,6 +104,7 @@ begin
|
|
|
FBillsMeasureTree.DataView := sdvBillsMeasure;
|
|
|
FBillsMeasureTree.SeedID := Max(FBillsMeasureTree.SeedID, 100);
|
|
|
FBillsMeasureTree.Link(TProjectData(FProjectData).BillsCompileData.BillsCompileTree, True);
|
|
|
+ FBillsMeasureTree.CompileTree := TProjectData(FProjectData).BillsCompileData.BillsCompileTree;
|
|
|
|
|
|
FFormulaCalc := TFormulaCalc.Create(FBillsMeasureTree);
|
|
|
FFormulaCalc.OnGetValue := OnGetCardinalNum;
|
|
@@ -165,7 +166,8 @@ end;
|
|
|
procedure TBillsMeasureData.sdvBillsMeasureAfterAddRecord(
|
|
|
ARecord: TsdDataRecord);
|
|
|
begin
|
|
|
- ARecord.ValueByName('IsMeasureAdd').AsBoolean := True;
|
|
|
+ if TProjectData(FProjectData).PhaseData.Active then
|
|
|
+ ARecord.ValueByName('IsMeasureAdd').AsBoolean := True;
|
|
|
end;
|
|
|
|
|
|
procedure TBillsMeasureData.sdvBillsMeasureGetText(var Text: String;
|
|
@@ -273,35 +275,33 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
|
|
|
DataSetErrorMessage(Allow, '变更单价已被锁定,不允许修改!');
|
|
|
end;
|
|
|
|
|
|
- procedure CheckNodeWritable;
|
|
|
+ procedure CheckNodeWritable(ANode: TBillsIDTreeNode);
|
|
|
var
|
|
|
- vNode: TBillsIDTreeNode;
|
|
|
iCreatePhase: Integer;
|
|
|
begin
|
|
|
- vNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(GetBillsID));
|
|
|
- iCreatePhase := vNode.Rec.ValueByName('CreatePhaseID').AsInteger;
|
|
|
+ iCreatePhase := ANode.Rec.ValueByName('CreatePhaseID').AsInteger;
|
|
|
|
|
|
- if vNode.ID = iPriceMarginID then
|
|
|
+ if ANode.ID = iPriceMarginID then
|
|
|
DataSetErrorMessage(Allow, sBills_PMHint);
|
|
|
|
|
|
if SameText('B_Code', AColumn.FieldName) or
|
|
|
SameText('Name', AColumn.FieldName) or
|
|
|
SameText('Units', AColumn.FieldName) then
|
|
|
- if vNode.Rec.ValueByName('AddQcQuantity').AsFloat <> 0 then
|
|
|
+ if ANode.Rec.ValueByName('AddQcQuantity').AsFloat <> 0 then
|
|
|
DataSetErrorMessage(Allow, '该清单已进行过变更,不可修改清单编号、名称、单位!');
|
|
|
if not Allow then Exit;
|
|
|
|
|
|
if SameText('Price', AColumn.FieldName) then
|
|
|
- if vNode.Rec.ValueByName('AddGatherTotalPrice').AsFloat <> 0 then
|
|
|
+ if ANode.Rec.ValueByName('AddGatherTotalPrice').AsFloat <> 0 then
|
|
|
DataSetErrorMessage(Allow, '该清单已经计量,不可修改清单单价!');
|
|
|
if not Allow then Exit;
|
|
|
|
|
|
if SameText('NewPrice', AColumn.FieldName) then
|
|
|
- if vNode.Rec.ValueByName('AddPcTotalPrice').AsFloat <> 0 then
|
|
|
+ if ANode.Rec.ValueByName('AddPcTotalPrice').AsFloat <> 0 then
|
|
|
DataSetErrorMessage(Allow, '该清单已经计量,不可修改清单变更单价!');
|
|
|
if not Allow then Exit;
|
|
|
|
|
|
- if vNode.HasChildren then
|
|
|
+ if ANode.HasChildren then
|
|
|
begin
|
|
|
if Text = '' then
|
|
|
Exit
|
|
@@ -316,7 +316,7 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
|
|
|
// 目前仅允许本期合同计量,可直接输入金额
|
|
|
if SameText('CurDealTotalPrice', AColumn.FieldName) then
|
|
|
begin
|
|
|
- if not vNode.TotalPriceEnable then
|
|
|
+ if not ANode.TotalPriceEnable then
|
|
|
DataSetErrorMessage(Allow, '该清单不可直接输入金额,如需直接输入金额,请先清空所有数量、单价!');
|
|
|
end
|
|
|
else if SameText('CurDealQuantity', AColumn.FieldName) or
|
|
@@ -324,7 +324,7 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
|
|
|
SameText('CurPcQuantity', AColumn.FieldName) or
|
|
|
SameText('Price', AColumn.FieldName) then
|
|
|
begin
|
|
|
- if not vNode.CountPriceEnable then
|
|
|
+ if not ANode.CountPriceEnable then
|
|
|
DataSetErrorMessage(Allow, '该清单不可输入数量单价,如需使用数量×单价计算,请先清空所有直接输入的金额!');
|
|
|
end;
|
|
|
end;
|
|
@@ -336,7 +336,7 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
|
|
|
DataSetErrorMessage(Allow, Format('该清单为第%d期新增清单,不可填写本期合同计量数据!', [iCreatePhase]));}
|
|
|
end;
|
|
|
|
|
|
- procedure SetQuantity(const AField: string);
|
|
|
+ procedure SetQuantity(ANode: TBillsIDTreeNode; const AField: string);
|
|
|
var
|
|
|
vNode: TBillsIDTreeNode;
|
|
|
begin
|
|
@@ -357,15 +357,11 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
|
|
|
AValue.Owner.ValueByName(AField + 'Formula').AsString := Text;
|
|
|
Text := FloatToStr(QuantityRoundTo(EvaluateExprs(Text)));
|
|
|
end;
|
|
|
-
|
|
|
- vNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(GetBillsID));
|
|
|
- if vNode.Rec.CalcType.AsInteger <> 0 then
|
|
|
- vNode.Rec.CalcType.AsInteger := 0;
|
|
|
+
|
|
|
+ ANode.Rec.SetIntValue(ANode.Rec.CalcType, 0);
|
|
|
end;
|
|
|
|
|
|
- procedure SetTotalPrice(const AField: string);
|
|
|
- var
|
|
|
- vNode: TBillsIDTreeNode;
|
|
|
+ procedure SetTotalPrice(ANode: TBillsIDTreeNode; const AField: string);
|
|
|
begin
|
|
|
// 变更应选择变更令
|
|
|
if SameText(AField , 'Qc') or SameText(AField , 'Pc') then
|
|
@@ -385,31 +381,33 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
|
|
|
Text := FloatToStr(TotalPriceRoundTo(EvaluateExprs(Text)));
|
|
|
end;
|
|
|
|
|
|
- vNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(GetBillsID));
|
|
|
- if vNode.Rec.CalcType.AsInteger <> 1 then
|
|
|
- vNode.Rec.CalcType.AsInteger := 1;
|
|
|
+ ANode.Rec.SetIntValue(ANode.Rec.CalcType, 1);
|
|
|
end;
|
|
|
|
|
|
- procedure DoCurChanged;
|
|
|
+ procedure DoCurChanged(ANode: TBillsIDTreeNode);
|
|
|
begin
|
|
|
if SameText(AColumn.FieldName, 'CurDealQuantity') then
|
|
|
- SetQuantity('Deal')
|
|
|
+ SetQuantity(ANode, 'Deal')
|
|
|
else if SameText(AColumn.FieldName, 'CurQcQuantity') then
|
|
|
- SetQuantity('Qc')
|
|
|
+ SetQuantity(ANode, 'Qc')
|
|
|
else if SameText(AColumn.FieldName, 'CurPcQuantity') then
|
|
|
- SetQuantity('Pc')
|
|
|
+ SetQuantity(ANode, 'Pc')
|
|
|
else if SameText(AColumn.FieldName, 'CurDealTotalPrice') then
|
|
|
- SetTotalPrice('Deal')
|
|
|
+ SetTotalPrice(ANode, 'Deal')
|
|
|
else if SameText(AColumn.FieldName, 'CurQcTotalPrice') then
|
|
|
- SetTotalPrice('Qc')
|
|
|
+ SetTotalPrice(ANode, 'Qc')
|
|
|
else if SameText(AColumn.FieldName, 'CurPcTotalPrice') then
|
|
|
- SetTotalPrice('Pc')
|
|
|
+ SetTotalPrice(ANode, 'Pc')
|
|
|
else if (Pos('DgnQuantity', AColumn.FieldName) > 0) or
|
|
|
SameText(AColumn.FieldName, 'Quantity') then
|
|
|
Text := FloatToStr(QuantityRoundTo(StrToFloatDef(Text, 0)))
|
|
|
else if SameText(AColumn.FieldName, 'NewPrice') or
|
|
|
SameText(AColumn.FieldName, 'Price') then
|
|
|
- Text := FloatToStr(PriceRoundTo(StrToFloatDef(Text, 0)));
|
|
|
+ Text := FloatToStr(PriceRoundTo(StrToFloatDef(Text, 0)))
|
|
|
+ else if SameText(AColumn.FieldName, 'Code') then
|
|
|
+ BillsMeasureTree.RecodeChildrenCode(ANode, AValue.AsString, Text)
|
|
|
+ else if SameText(AColumn.FieldName, 'B_Code') then
|
|
|
+ BillsMeasureTree.RecodeChildrenB_Code(ANode, AValue.AsString, Text);
|
|
|
end;
|
|
|
|
|
|
function CheckValidData: Boolean;
|
|
@@ -423,29 +421,34 @@ procedure TBillsMeasureData.sdvBillsMeasureSetText(var Text: String;
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+var
|
|
|
+ vNode: TBillsIDTreeNode;
|
|
|
begin
|
|
|
if not Assigned(AValue) then Exit;
|
|
|
// 修改后数据与原数据相同则不提交
|
|
|
if not CheckValidData then
|
|
|
Allow := False;
|
|
|
if not Allow then Exit;
|
|
|
+
|
|
|
+ vNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(GetBillsID));
|
|
|
|
|
|
CheckLockedData;
|
|
|
if not Allow then Exit;
|
|
|
|
|
|
- CheckNodeWritable;
|
|
|
+ CheckNodeWritable(vNode);
|
|
|
if not Allow then Exit;
|
|
|
|
|
|
Text := Trim(Text);
|
|
|
if Pos('=', Text) = 1 then
|
|
|
Text := Copy(Text, 2, Length(Text) - 1);
|
|
|
- DoCurChanged;
|
|
|
+
|
|
|
+ DoCurChanged(vNode);
|
|
|
end;
|
|
|
|
|
|
procedure TBillsMeasureData.sdvBillsMeasureNeedLookupRecord(
|
|
|
ARecord: TsdDataRecord; AColumn: TsdViewColumn; ANewText: String);
|
|
|
|
|
|
- function CheckNeedAddPhaseRecord(ANode: TBillsIDTreeNode): Boolean;
|
|
|
+ function CheckNeedAddPhaseRecord(ANode: TMeasureBillsIDTreeNode): Boolean;
|
|
|
begin
|
|
|
Result := SameText(AColumn.FieldName, 'CurDealQuantity') or
|
|
|
SameText(AColumn.FieldName, 'CurQcQuantity') or
|
|
@@ -485,7 +488,11 @@ procedure TBillsMeasureData.sdvBillsMeasureNeedLookupRecord(
|
|
|
begin
|
|
|
if ANode.Rec.CalcType.AsInteger <> 0 then
|
|
|
ANode.Rec.CalcType.AsInteger := 0;
|
|
|
+<<<<<<< HEAD
|
|
|
|
|
|
+=======
|
|
|
+
|
|
|
+>>>>>>> 3.1.5
|
|
|
if CheckNumeric(ANewText) then
|
|
|
APhaseRec.ValueByName(AType + 'Quantity').AsFloat := QuantityRoundTo(StrToFloatDef(ANewText, 0))
|
|
|
else
|
|
@@ -498,7 +505,11 @@ procedure TBillsMeasureData.sdvBillsMeasureNeedLookupRecord(
|
|
|
end;
|
|
|
|
|
|
procedure SetTotalPriceRec(ANode: TBillsIDTreeNode; APhaseRec: TsdDataRecord; const AType: string);
|
|
|
+<<<<<<< HEAD
|
|
|
begin
|
|
|
+=======
|
|
|
+ begin
|
|
|
+>>>>>>> 3.1.5
|
|
|
if ANode.Rec.CalcType.AsInteger <> 1 then
|
|
|
ANode.Rec.CalcType.AsInteger := 1;
|
|
|
APhaseRec.ValueByName(AType + 'Flag').AsInteger := 2;
|
|
@@ -574,15 +585,19 @@ procedure TBillsMeasureData.sdvBillsMeasureNeedLookupRecord(
|
|
|
|
|
|
var
|
|
|
NewRec: TStageRecord;
|
|
|
- vNode: TBillsIDTreeNode;
|
|
|
+ vNode: TMeasureBillsIDTreeNode;
|
|
|
begin
|
|
|
- vNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(ARecord.ValueByName('ID').AsInteger));
|
|
|
+ vNode := TMeasureBillsIDTreeNode(BillsMeasureTree.FindNode(ARecord.ValueByName('ID').AsInteger));
|
|
|
if not CheckNodeWritable(vNode) then
|
|
|
Exit;
|
|
|
|
|
|
if CheckNeedAddPhaseRecord(vNode) then
|
|
|
begin
|
|
|
+<<<<<<< HEAD
|
|
|
if (Pos('Quantity', AColumn.FieldName) > 0) or (Pos('TotalPrice', AColumn.FieldName) > 0) then
|
|
|
+=======
|
|
|
+ if(Pos('Quantity', AColumn.FieldName) > 0) or (Pos('TotalPrice', AColumn.FieldName) > 0) then
|
|
|
+>>>>>>> 3.1.5
|
|
|
if HasCardinalNum(ANewText) then
|
|
|
raise Exception.Create('公式不可输入参数');
|
|
|
NewRec := StageData.AddStageRecord(ARecord.ValueByName('ID').AsInteger);
|
|
@@ -697,7 +712,7 @@ begin
|
|
|
if not TProjectData(FProjectData).StageDataReadOnly then
|
|
|
|
|
|
for i := 0 to BillsMeasureTree.Count - 1 do
|
|
|
- CalculateNode(TBillsIDTreeNode(BillsMeasureTree.Items[i]));
|
|
|
+ CalculateNode(TMeasureBillsIDTreeNode(BillsMeasureTree.Items[i]));
|
|
|
|
|
|
{Cacl := TBillsCalculate.Create(Self);
|
|
|
try
|
|
@@ -803,8 +818,9 @@ end;
|
|
|
procedure TBillsMeasureData.sdvBillsMeasureAfterValueChanged(
|
|
|
AValue: TsdValue);
|
|
|
var
|
|
|
- stnNode: TsdIDTreeNode;
|
|
|
+ vNode: TBillsIDTreeNode;
|
|
|
begin
|
|
|
+
|
|
|
if TProjectData(FProjectData).PhaseData.Active then
|
|
|
begin
|
|
|
if AValue.FieldName = 'Price' then
|
|
@@ -814,8 +830,19 @@ begin
|
|
|
end;
|
|
|
if Pos('DgnQuantity1', AValue.FieldName) > 0 then
|
|
|
begin
|
|
|
- stnNode := BillsMeasureTree.FindNode(AValue.Owner.ValueByName('ID').AsInteger);
|
|
|
- CalcAddDgnPrice(stnNode);
|
|
|
+ vNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(AValue.Owner.ValueByName('ID').AsInteger));
|
|
|
+ CalcAddDgnPrice(vNode);
|
|
|
+ end;
|
|
|
+
|
|
|
+ if (AValue.FieldName = 'Code') then
|
|
|
+ begin
|
|
|
+ vNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(AValue.Owner.ValueByName('ID').AsInteger));
|
|
|
+ BillsMeasureTree.RecodeChildrenCode(vNode, VarToStrDef(AValue.OldValue, ''), AValue.AsString);
|
|
|
+ end
|
|
|
+ else if (AValue.FieldName = 'B_Code') then
|
|
|
+ begin
|
|
|
+ vNode := TBillsIDTreeNode(BillsMeasureTree.FindNode(AValue.Owner.ValueByName('ID').AsInteger));
|
|
|
+ BillsMeasureTree.RecodeChildrenB_Code(vNode, VarToStrDef(AValue.OldValue, ''), AValue.AsString);
|
|
|
end;
|
|
|
end;
|
|
|
|
|
@@ -828,7 +855,7 @@ begin
|
|
|
for iIndex := 0 to BillsMeasureTree.Count - 1 do
|
|
|
begin
|
|
|
stnNode := BillsMeasureTree.Items[iIndex];
|
|
|
- StageRec := TBillsIDTreeNode(stnNode).StageRec;
|
|
|
+ StageRec := TMeasureBillsIDTreeNode(stnNode).StageRec;
|
|
|
if (stnNode.ParentID <> -1) then
|
|
|
if Assigned(StageRec) then
|
|
|
stnNode.Expanded := StageRec.GatherTotalPrice.AsFloat <> 0
|
|
@@ -905,7 +932,9 @@ begin
|
|
|
fDivisor := ValueByName('TotalPrice').AsFloat + ValueByName('AddQcTotalPrice').AsFloat
|
|
|
+ ValueByName('AddPcTotalPrice').AsFloat;
|
|
|
if fDivisor <> 0 then
|
|
|
- ValueByName('AddCompleteRate').AsFloat := AdvRoundTo(fDividend/fDivisor*100);
|
|
|
+ ValueByName('AddCompleteRate').AsFloat := AdvRoundTo(fDividend/fDivisor*100)
|
|
|
+ else
|
|
|
+ ValueByName('AddCompleteRate').Clear;
|
|
|
end;
|
|
|
end;
|
|
|
|
|
@@ -937,12 +966,12 @@ end;
|
|
|
procedure TBillsMeasureData.ResetTreeNodeStageRec;
|
|
|
var
|
|
|
i: Integer;
|
|
|
- vNode: TBillsIDTreeNode;
|
|
|
+ vNode: TMeasureBillsIDTreeNode;
|
|
|
begin
|
|
|
if not StageData.Active then Exit;
|
|
|
for i := 0 to BillsMeasureTree.Count - 1 do
|
|
|
begin
|
|
|
- vNode := TBillsIDTreeNode(BillsMeasureTree.Items[i]);
|
|
|
+ vNode := TMeasureBillsIDTreeNode(BillsMeasureTree.Items[i]);
|
|
|
vNode.StageRec := StageData.StageRecord(vNode.ID);
|
|
|
end;
|
|
|
end;
|
|
@@ -959,7 +988,7 @@ begin
|
|
|
UpdateRecordPM(stnNode.ParentID, ADiffer);
|
|
|
end;
|
|
|
|
|
|
-procedure TBillsMeasureData.CalculateNode(ANode: TBillsIDTreeNode);
|
|
|
+procedure TBillsMeasureData.CalculateNode(ANode: TMeasureBillsIDTreeNode);
|
|
|
begin
|
|
|
if Assigned(ANode.StageRec) then
|
|
|
begin
|