|
@@ -3,12 +3,12 @@ unit ZJJLDm;
|
|
|
interface
|
|
|
|
|
|
uses
|
|
|
- ZjGrid,
|
|
|
+ ZjGrid, MeasureGatherZJJL,
|
|
|
SysUtils, Classes, DB, DBClient, ADODB, sdIDTree, sdDB, Provider,
|
|
|
Windows, BillsTree, sdProvider, Variants;
|
|
|
|
|
|
type
|
|
|
- TZJJLType = (ztFx, ztGcl);
|
|
|
+ TZJJLType = (ztFx, ztGcl, ztGclGather);
|
|
|
|
|
|
TZJJLNode = class
|
|
|
private
|
|
@@ -37,6 +37,8 @@ type
|
|
|
sdvZJJL: TsdDataView;
|
|
|
sdpHistory: TsdADOProvider;
|
|
|
sddHistory: TsdDataSet;
|
|
|
+ sdpZJJLDetail: TsdADOProvider;
|
|
|
+ sddZJJLDetail: TsdDataSet;
|
|
|
procedure sdvZJJLBeforeValueChange(AValue: TsdValue;
|
|
|
const NewValue: Variant; var Allow: Boolean);
|
|
|
procedure sdvZJJLAfterDeleteRecord(ARecord: TsdDataRecord);
|
|
@@ -46,6 +48,7 @@ type
|
|
|
FNewID: Integer;
|
|
|
FOrgDataList: TList;
|
|
|
|
|
|
+ function GetNewCode(ANewID: Integer): string;
|
|
|
procedure GenerateZJJLNode(ANode: TsdIDTreeNode; AType: Integer);
|
|
|
|
|
|
function CheckLastXmj(AID: Integer): Boolean;
|
|
@@ -54,6 +57,7 @@ type
|
|
|
procedure GenerateLastXmj(ANode: TsdIDTreeNode);
|
|
|
procedure GenerateNode(ANode: TsdIDTreeNode);
|
|
|
|
|
|
+ function CheckLeafNodeMeasureExist(AID: Integer): Boolean;
|
|
|
procedure GenerateLeafNode(ANode: TsdIDTreeNode);
|
|
|
procedure GenerateNodeByB_Code(ANode: TsdIDTreeNode);
|
|
|
|
|
@@ -96,6 +100,7 @@ type
|
|
|
|
|
|
procedure GenerateAll;
|
|
|
procedure GenerateAllByB_Code;
|
|
|
+ procedure GenerateAllByB_CodeGather;
|
|
|
procedure AssignedCurData(ARec: TsdDataRecord; ADetailGrid: TZJGrid);
|
|
|
|
|
|
function GetInfoRecByCode(ABillsID: Integer): TZJJLInfoRec;
|
|
@@ -152,6 +157,9 @@ begin
|
|
|
sddHistory.AddIndex('idxID', 'ID');
|
|
|
sddHistory.AddIndex('idxHistory', 'BillsID;Type;FieldName');
|
|
|
|
|
|
+ sdpZJJLDetail.Connection := AConnection;
|
|
|
+ sddZJJLDetail.Open;
|
|
|
+
|
|
|
CheckZjjlVerison;
|
|
|
end;
|
|
|
|
|
@@ -260,6 +268,7 @@ end;
|
|
|
procedure TZJJLData.DeleteAll;
|
|
|
begin
|
|
|
sddZJJL.DeleteAll;
|
|
|
+ sddZJJLDetail.DeleteAll;
|
|
|
end;
|
|
|
|
|
|
procedure TZJJLData.RestoreOrgData;
|
|
@@ -372,37 +381,15 @@ begin
|
|
|
end;
|
|
|
|
|
|
procedure TZJJLData.GenerateLeafNode(ANode: TsdIDTreeNode);
|
|
|
-
|
|
|
- function CheckMeasureExist(AID: Integer): Boolean;
|
|
|
- var
|
|
|
- StageRec: TsdDataRecord;
|
|
|
- begin
|
|
|
- StageRec := TPhaseData(FPhaseData).StageData.StageRecord(AID);
|
|
|
- Result := Assigned(StageRec) and
|
|
|
- ((StageRec.ValueByName('GatherQuantity').AsFloat <> 0)
|
|
|
- or (StageRec.ValueByName('GatherTotalPrice').AsFloat <> 0));
|
|
|
- end;
|
|
|
-
|
|
|
begin
|
|
|
if (ANode.Rec.ValueByName('B_Code').AsString <> '') and
|
|
|
- CheckMeasureExist(ANode.ID) then
|
|
|
+ CheckLeafNodeMeasureExist(ANode.ID) then
|
|
|
GenerateZJJLNode(ANode, 1);
|
|
|
end;
|
|
|
|
|
|
procedure TZJJLData.GenerateZJJLNode(ANode: TsdIDTreeNode;
|
|
|
AType: Integer);
|
|
|
|
|
|
- function GetNewCode: string;
|
|
|
- begin
|
|
|
- with TProjectData(TPhaseData(FPhaseData).ProjectData) do
|
|
|
- begin
|
|
|
- Result := ProjProperties.ZJJLPreText;
|
|
|
- if (Result <> '') and (Result[Length(Result)] <> '-') then
|
|
|
- Result := Result + '-';
|
|
|
- Result := Result + Format('%d-%d', [PhaseIndex, FNewID]);
|
|
|
- end;
|
|
|
- end;
|
|
|
-
|
|
|
function GetOrgZJJLNode(ABillsID: Integer): TZJJLNode;
|
|
|
var
|
|
|
iIndex: Integer;
|
|
@@ -443,7 +430,7 @@ begin
|
|
|
else if AType = Ord(ztGcl) then
|
|
|
Rec.ValueByName('BillsCode').AsString := ANode.Rec.ValueByName('B_Code').AsString;
|
|
|
|
|
|
- Rec.ValueByName('Code').AsString := GetFieldValue('Code', GetNewCode);
|
|
|
+ Rec.ValueByName('Code').AsString := GetFieldValue('Code', GetNewCode(FNewID));
|
|
|
Rec.ValueByName('CertificateCode').AsString := GetFieldValue('CertificateCode', '');
|
|
|
Rec.ValueByName('FormulaMemo').AsString := GetFieldValue('FormulaMemo', '');
|
|
|
Rec.ValueByName('RelaFile').AsString := GetFieldValue('RelaFile', '');
|
|
@@ -689,6 +676,11 @@ begin
|
|
|
HistoryRec.ValueByName('BillsID').AsInteger := AZJJL_Rec.ValueByName('BillsID').AsInteger;
|
|
|
HistoryRec.ValueByName('Type').AsInteger := AZJJL_Rec.ValueByName('Type').AsInteger;
|
|
|
HistoryRec.ValueByName('FieldName').AsString := AFieldName;
|
|
|
+
|
|
|
+ HistoryRec.ValueByName('B_Code').AsString := AZJJL_Rec.ValueByName('B_Code').AsString;
|
|
|
+ HistoryRec.ValueByName('Name').AsString := AZJJL_Rec.ValueByName('Name').AsString;
|
|
|
+ HistoryRec.ValueByName('Units').AsString := AZJJL_Rec.ValueByName('Units').AsString;
|
|
|
+ HistoryRec.ValueByName('Price').AsFloat := AZJJL_Rec.ValueByName('Price').AsFloat;
|
|
|
end;
|
|
|
HistoryRec.ValueByName('FieldValue').AsString := AValue;
|
|
|
end;
|
|
@@ -756,4 +748,123 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+procedure TZJJLData.GenerateAllByB_CodeGather;
|
|
|
+
|
|
|
+ procedure GenerateZJJLGather(AManager: TmgZJJLManager; ANode: TBillsIDTreeNode);
|
|
|
+ var
|
|
|
+ iChild: Integer;
|
|
|
+ vChild: TBillsIDTreeNode;
|
|
|
+ begin
|
|
|
+ if ANode.HasChildren then
|
|
|
+ begin
|
|
|
+ iChild := 0;
|
|
|
+ vChild := TBillsIDTreeNode(ANode.NextNode);
|
|
|
+ while iChild < ANode.PosterityCount do
|
|
|
+ begin
|
|
|
+ if not vChild.HasChildren and CheckLeafNodeMeasureExist(vChild.ID) then
|
|
|
+ AManager.AddZJJLAndDetail(vChild, ANode);
|
|
|
+ vChild := TBillsIDTreeNode(vChild.NextNode);
|
|
|
+ Inc(iChild);
|
|
|
+ end;
|
|
|
+ end
|
|
|
+ else if CheckLeafNodeMeasureExist(ANode.ID) then
|
|
|
+ AManager.AddZJJLAndDetail(ANode, ANode);
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure GenerateZJJLGatherByNode(AManager: TmgZJJLManager; ANode: TsdIDTreeNode);
|
|
|
+ begin
|
|
|
+ if not Assigned(ANode) then Exit;
|
|
|
+ if ANode.HasChildren and not TBillsIDTreeNode(ANode).Rec.IsGatherZJJL.AsBoolean then
|
|
|
+ GenerateZJJLGatherByNode(AManager, ANode.FirstChild)
|
|
|
+ else
|
|
|
+ GenerateZJJLGather(AManager, TBillsIDTreeNode(ANode));
|
|
|
+ GenerateZJJLGatherByNode(AManager, ANode.NextSibling);
|
|
|
+ end;
|
|
|
+
|
|
|
+ function GetFieldValue(AZJJL: TmgZJJL; const AFieldName, ADefaultValue: string): string;
|
|
|
+ var
|
|
|
+ HistoryRec: TsdDataRecord;
|
|
|
+ begin
|
|
|
+ HistoryRec := sddHistory.FindKey('idxHistory', VarArrayOf([AZJJL.GatherNode.ID, AZJJL.B_Code, AZJJL.Name, AZJJL.Units, AZJJL.Price, Integer(ztGclGather), AFieldName]));
|
|
|
+ if Assigned(HistoryRec) then
|
|
|
+ Result := HistoryRec.ValueByName('FieldValue').AsString
|
|
|
+ else
|
|
|
+ Result := ADefaultValue;
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure SaveGatherData(AManager: TmgZJJLManager);
|
|
|
+ var
|
|
|
+ i, j: Integer;
|
|
|
+ vZJJL: TmgZJJL;
|
|
|
+ Rec: TsdDataRecord;
|
|
|
+ begin
|
|
|
+ for i := 0 to AManager.ZJJLCount - 1 do
|
|
|
+ begin
|
|
|
+ vZJJL := AManager.ZJJL[i];
|
|
|
+ Rec := sddZJJL.Add;
|
|
|
+ Rec.ValueByName('ID').AsInteger := i + 1;
|
|
|
+ Rec.ValueByName('BillsID').AsInteger := vZJJL.Detail[0].RelaNode.ID;
|
|
|
+ Rec.ValueByName('GatherBillsID').AsInteger := vZJJL.GatherNode.ID;
|
|
|
+ Rec.ValueByName('BillsCode').AsString := vZJJL.B_Code;
|
|
|
+ Rec.ValueByName('B_Code').AsString := vZJJL.B_Code;
|
|
|
+ Rec.ValueByName('Name').AsString := vZJJL.Name;
|
|
|
+ Rec.ValueByName('Units').AsString := vZJJL.Units;
|
|
|
+ Rec.ValueByName('Price').AsFloat := vZJJL.Price;
|
|
|
+
|
|
|
+ Rec.ValueByName('Code').AsString := GetFieldValue(vZJJL, 'Code', GetNewCode(i+1));
|
|
|
+ Rec.ValueByName('CertificateCode').AsString := GetFieldValue(vZJJL, 'CertificateCode', '');
|
|
|
+ Rec.ValueByName('FormulaMemo').AsString := GetFieldValue(vZJJL, 'FormulaMemo', '');
|
|
|
+ Rec.ValueByName('RelaFile').AsString := GetFieldValue(vZJJL, 'RelaFile', '');
|
|
|
+
|
|
|
+ Rec.ValueByName('BGLCode').AsString := GetFieldValue(vZJJL, 'BGLCode', vZJJL.BGLCode);
|
|
|
+ Rec.ValueByName('PegName').AsString := GetFieldValue(vZJJL, 'PegName', '');
|
|
|
+ Rec.ValueByName('BeginPeg').AsString := GetFieldValue(vZJJL, 'BeginPeg', vZJJL.BeginPeg);
|
|
|
+ Rec.ValueByName('EndPeg').AsString := GetFieldValue(vZJJL, 'EndPeg', vZJJL.EndPeg);
|
|
|
+ Rec.ValueByName('FBFXName').AsString := GetFieldValue(vZJJL, 'FBFXName', vZJJL.GatherNode.Rec.Name.AsString);
|
|
|
+ Rec.ValueByName('UnitName').AsString := GetFieldValue(vZJJL, 'UnitName', '');
|
|
|
+ Rec.ValueByName('DrawingCode').AsString := GetFieldValue(vZJJL, 'DrawingCode', vZJJL.DrawingCode);
|
|
|
+ for j := 0 to vZJJL.DetailCount - 1 do
|
|
|
+ begin
|
|
|
+ Rec := sddZJJLDetail.Add;
|
|
|
+ Rec.ValueByName('ID').AsInteger := i + 1;
|
|
|
+ Rec.ValueByName('BillsID').AsInteger := vZJJL.Detail[j].RelaNode.ID;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ vManager: TmgZJJLManager;
|
|
|
+begin
|
|
|
+ vManager := TmgZJJLManager.Create;
|
|
|
+ try
|
|
|
+ DeleteAll;
|
|
|
+ GenerateZJJLGatherByNode(vManager, MainBillsTree.FirstNode);
|
|
|
+ SaveGatherData(vManager);
|
|
|
+ TPhaseData(FPhaseData).PhaseProperty.ZjjlVersion := Integer(ztGclGather);
|
|
|
+ finally
|
|
|
+ vManager.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TZJJLData.CheckLeafNodeMeasureExist(AID: Integer): Boolean;
|
|
|
+var
|
|
|
+ StageRec: TsdDataRecord;
|
|
|
+begin
|
|
|
+ StageRec := TPhaseData(FPhaseData).StageData.StageRecord(AID);
|
|
|
+ Result := Assigned(StageRec) and
|
|
|
+ ((StageRec.ValueByName('GatherQuantity').AsFloat <> 0)
|
|
|
+ or (StageRec.ValueByName('GatherTotalPrice').AsFloat <> 0));
|
|
|
+end;
|
|
|
+
|
|
|
+function TZJJLData.GetNewCode(ANewID: Integer): string;
|
|
|
+begin
|
|
|
+ with TProjectData(TPhaseData(FPhaseData).ProjectData) do
|
|
|
+ begin
|
|
|
+ Result := ProjProperties.ZJJLPreText;
|
|
|
+ if (Result <> '') and (Result[Length(Result)] <> '-') then
|
|
|
+ Result := Result + '-';
|
|
|
+ Result := Result + Format('%d-%d', [PhaseIndex, ANewID]);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
end.
|