123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- unit stgGatherDm;
- interface
- uses
- SysUtils, Classes, stgGatherCacheData, sdDB, sdProvider;
- type
- TstgGatherData = class(TDataModule)
- smpGatherTree: TsdMemoryProvider;
- sddGatherTree: TsdDataSet;
- sdvGatherTree: TsdDataView;
- smpSubTenders: TsdMemoryProvider;
- sddSubTenders: TsdDataSet;
- sdvSubTenders: TsdDataView;
- smpBillsDetail: TsdMemoryProvider;
- sddBillsDetail: TsdDataSet;
- sdvBillsDetail: TsdDataView;
- sdmErrorDetail: TsdMemoryProvider;
- sddErrorDetail: TsdDataSet;
- sdvErrorDetail: TsdDataView;
- procedure sdvBillsDetailGetText(var Text: String;
- ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
- DisplayText: Boolean);
- procedure sdvBillsDetailFilterRecord(ARecord: TsdDataRecord;
- var Allow: Boolean);
- procedure sdvGatherTreeCurrentChanged(ARecord: TsdDataRecord);
- procedure sdvGatherTreeGetText(var Text: String;
- ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
- DisplayText: Boolean);
- procedure sdvErrorDetailFilterRecord(ARecord: TsdDataRecord;
- var Allow: Boolean);
- procedure sdvSubTendersCurrentChanged(ARecord: TsdDataRecord);
- procedure sdvErrorDetailGetText(var Text: String;
- ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
- DisplayText: Boolean);
- private
- procedure LoadSubTenders(ACacheData: TstgGatherCacheData);
- procedure LoadGatherTreeNodeDetail(ANode: TstgGatherTreeNode);
- procedure LoadGatherTreeNode(ANode: TstgGatherTreeNode);
- procedure LoadGatherTree(ACacheData: TstgGatherCacheData);
- procedure LoadError(AError: TstgErrorInfo);
- procedure LoadErrors(ACacheData: TstgGatherCacheData);
- public
- procedure LoadGatherData(ACacheData: TstgGatherCacheData);
- end;
- implementation
- uses
- Variants, DB, ConditionalDefines;
- {$R *.dfm}
- { TstgGatherData }
- procedure TstgGatherData.LoadGatherData(ACacheData: TstgGatherCacheData);
- begin
- LoadSubTenders(ACacheData);
- LoadGatherTree(ACacheData);
- LoadErrors(ACacheData);
- sdvGatherTree.Active := True;
- sdvBillsDetail.Active := True;
- sdvBillsDetail.RefreshFilter;
- sdvSubTenders.Active := True;
- sdvErrorDetail.Active := True;
- sdvErrorDetail.RefreshFilter;
- end;
- procedure TstgGatherData.LoadGatherTree(ACacheData: TstgGatherCacheData);
- var
- i: Integer;
- vNode:TstgGatherTreeNode;
- begin
- if _IsDebugView then
- ACacheData.GatherTree.SaveTreeToFile('E:\stgGatherTree.txt');
- for i := 0 to ACacheData.GatherTree.CacheNodes.Count - 1 do
- begin
- vNode := TstgGatherTreeNode(ACacheData.GatherTree.CacheNodes.Items[i]);
- LoadGatherTreeNode(vNode);
- end;
- end;
- procedure TstgGatherData.LoadGatherTreeNode(ANode: TstgGatherTreeNode);
- var
- Rec: TsdDataRecord;
- begin
- Rec := sddGatherTree.Add;
- Rec.ValueByName('ID').AsInteger := ANode.ID;
- Rec.ValueByName('ParentID').AsInteger := ANode.ParentID;
- Rec.ValueByName('NextSiblingID').AsInteger := ANode.NextSiblingID;
- Rec.ValueByName('Code').AsString := ANode.Code;
- Rec.ValueByName('B_Code').AsString := ANode.B_Code;
- Rec.ValueByName('Name').AsString := ANode.Name;
- Rec.ValueByName('Units').AsString := ANode.Units;
- Rec.ValueByName('IsSubTender').AsBoolean := ANode.IsSubTender;
- Rec.ValueByName('DealQuantity').AsFloat := ANode.Gather.DealQuantity;
- Rec.ValueByName('DealTotalPrice').AsFloat := ANode.Gather.DealTotalPrice;
- Rec.ValueByName('QcQuantity').AsFloat := ANode.Gather.QcQuantity;
- Rec.ValueByName('QcTotalPrice').AsFloat := ANode.Gather.QcTotalPrice;
- Rec.ValueByName('QcBGLCode').AsString := ANode.Gather.QcBGLCode;
- Rec.ValueByName('QcBGLNum').AsString := ANode.Gather.QcBGLNum;
- if ANode.Children.Count = 0 then
- LoadGatherTreeNodeDetail(ANode);
- end;
- procedure TstgGatherData.LoadGatherTreeNodeDetail(
- ANode: TstgGatherTreeNode);
- var
- iSub, iDetail: Integer;
- vSub: TstgSubTenderStageData;
- vDetail: TstgSubTenderDetailData;
- Rec: TsdDataRecord;
- sSubTenderName: string;
- begin
- for iSub := 0 to ANode.SubTenderCount - 1 do
- begin
- vSub := ANode.SubTender[iSub];
- for iDetail := 0 to vSub.DetailCount - 1 do
- begin
- vDetail := vSub.Detail[iDetail];
- Rec := sddBillsDetail.Add;
- Rec.ValueByName('BillsID').AsInteger := ANode.ID;
- Rec.ValueByName('TenderID').AsInteger := vSub.SubTenderID;
- Rec.ValueByName('TenderName').AsString := '';
- Rec.ValueByName('SerialNo').AsInteger := vDetail.SerialNo;
- Rec.ValueByName('DealQuantity').AsFloat := vDetail.DetailStage.DealQuantity;
- Rec.ValueByName('DealTotalPrice').AsFloat := vDetail.DetailStage.DealTotalPrice;
- Rec.ValueByName('QcQuantity').AsFloat := vDetail.DetailStage.QcQuantity;
- Rec.ValueByName('QcTotalPrice').AsFloat := vDetail.DetailStage.QcTotalPrice;
- Rec.ValueByName('QcBGLCode').AsString := vDetail.DetailStage.QcBGLCode;
- Rec.ValueByName('QcBGLNum').AsString := vDetail.DetailStage.QcBGLNum;
- end;
- end;
- end;
- procedure TstgGatherData.LoadSubTenders(ACacheData: TstgGatherCacheData);
- var
- i: Integer;
- vSubTender: TstgGatherSubTender;
- Rec: TsdDataRecord;
- begin
- for i := 0 to ACacheData.SubTenderCount - 1 do
- begin
- vSubTender := ACacheData.SubTender[i];
- Rec := sddSubTenders.Add;
- Rec.ValueByName('ID').AsInteger := vSubTender.ID;
- Rec.ValueByName('Name').AsString := vSubTender.Rec.ValueByName('Name').AsString;
- end;
- end;
- procedure TstgGatherData.sdvBillsDetailGetText(var Text: String;
- ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
- DisplayText: Boolean);
- function GetTenderName(ATenderID: Integer): string;
- begin
- Result := VarToStrDef(sddSubTenders.Lookup('ID', ATenderID, 'Name'), '');
- end;
- begin
- if DisplayText and (AColumn.FieldName = 'TenderName') then
- Text := GetTenderName(ARecord.ValueByName('TenderID').asInteger);
- end;
- procedure TstgGatherData.sdvBillsDetailFilterRecord(ARecord: TsdDataRecord;
- var Allow: Boolean);
- begin
- if Assigned(sdvGatherTree.Current) then
- Allow := ARecord.ValueByName('BillsID').AsInteger = sdvGatherTree.Current.ValueByName('ID').AsInteger
- else
- Allow := False;
- end;
- procedure TstgGatherData.sdvGatherTreeCurrentChanged(
- ARecord: TsdDataRecord);
- begin
- sdvBillsDetail.RefreshFilter;
- end;
- procedure TstgGatherData.sdvGatherTreeGetText(var Text: String;
- ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
- DisplayText: Boolean);
- begin
- if (AValue.DataType = ftFloat) and (AValue.AsFloat = 0) then
- begin
- Text := '';
- end;
- end;
- procedure TstgGatherData.LoadErrors(ACacheData: TstgGatherCacheData);
- var
- i: Integer;
- begin
- for i := 0 to ACacheData.ErrorCount - 1 do
- LoadError(ACacheData.Error[i]);
- end;
- procedure TstgGatherData.sdvErrorDetailFilterRecord(ARecord: TsdDataRecord;
- var Allow: Boolean);
- begin
- if Assigned(sdvSubTenders.Current) then
- Allow := ARecord.ValueByName('TenderID').AsInteger = sdvSubTenders.Current.ValueByName('ID').AsInteger
- else
- Allow := False;
- end;
- procedure TstgGatherData.LoadError(AError: TstgErrorInfo);
- var
- i, j, k: Integer;
- vRelaDetail: TstgGatherTreeNode;
- vRelaDetailStage: TstgSubTenderStageData;
- Rec: TsdDataRecord;
- begin
- for i := 0 to AError.DetailCount - 1 do
- begin
- vRelaDetail := AError.Detail[i];
- for j := 0 to vRelaDetail.SubTenderCount - 1 do
- begin
- vRelaDetailStage := vRelaDetail.SubTender[j];
- for k := 0 to vRelaDetailStage.DetailCount - 1 do
- begin
- Rec := sddErrorDetail.Add;
- Rec.ValueByName('TenderID').AsInteger := vRelaDetail.SubTender[j].SubTenderID;
- Rec.ValueByName('RelaCode').AsString := AError.RelaNode.Code + AError.RelaNode.B_Code;
- Rec.ValueByName('DetailCode').AsString := vRelaDetail.Code + vRelaDetail.B_Code;
- Rec.ValueByName('DetailSerialNo').AsInteger := vRelaDetailStage.Detail[k].SerialNo;
- Rec.ValueByName('ErrorType').AsInteger := AError.ErrorType;
- end;
- end;
- end;
- end;
- procedure TstgGatherData.sdvSubTendersCurrentChanged(
- ARecord: TsdDataRecord);
- begin
- sdvErrorDetail.RefreshFilter;
- end;
- procedure TstgGatherData.sdvErrorDetailGetText(var Text: String;
- ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
- DisplayText: Boolean);
- function GetTenderName(ATenderID: Integer): string;
- begin
- Result := VarToStrDef(sddSubTenders.Lookup('ID', ATenderID, 'Name'), '');
- end;
- function GetErrorTypeText(AErrorType: Integer): string;
- begin
- case AErrorType of
- iErrorXmjAdd: Result := '劤藤';
- iErrorXmjDiff: Result := '닸瞳谿뵀꼇谿츰(데貫)';
- iErrorXmjLess: Result := '만淃淃커쌘,꿔늴�黨悧관';
- iErrorGclAdd: Result := '劤藤';
- iErrorGclDiff: Result := '닸瞳谿뵀꼇谿츰(데貫)';
- iErrorGclMore: Result := '묏넋좆헌데,꿔늴뜩黨悧관';
- iErrorGclLess: Result := '묏넋좆헌데,꿔늴�黨悧관';
- end;
- end;
- begin
- if DisplayText then
- begin
- if (AColumn.FieldName = 'TenderName') then
- Text := GetTenderName(ARecord.ValueByName('TenderID').asInteger)
- else if (AColumn.FieldName = 'ErrorType') then
- Text := GetErrorTypeText(AValue.AsInteger);
- end;
- end;
- end.
|