123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- unit PriceMarginClipboard;
- interface
- uses
- BaseClipboard, Classes, XmlDoc, XmlIntf, PriceMarginBillsDm, ZhAPI,
- Windows, ProjectGLDm, DetailGLDm, mDataRecord;
- Type
- TProjectGLNode = class
- private
- FID: Integer;
- FCode: string;
- FName: string;
- FUnits: string;
- FSpecs: string;
- FBasePrice: Double;
- FRiskRange: Double;
- FInfoPrice: Double;
- FInfoDate: string;
- public
- procedure SaveToXmlNode(AXmlNode: IXMLNode);
- procedure LoadFromXmlNode(AXmlNode: IXMLNode);
- end;
- TDetailGLNode = class
- private
- FGLID: Integer;
- FCode: string;
- FQuantity: Double;
- public
- procedure SaveToXmlNode(AXmlNode: IXMLNode);
- procedure LoadFromXmlNode(AXmlNode: IXMLNode);
- end;
- TDetailGL_Clipboard = class(TBaseClipboard)
- private
- FProjectGLData: TProjectGLData;
- FDetailGLData: TDetailGLData;
- FProjectGLs: TList;
- FDetailGls: TList;
- procedure SaveProjectGLsToXml(AXmlNode: IXMLNode);
- procedure SaveDetailGLsToXml(AXmlNode: IXMLNode);
- procedure CopyProjectGL(ARec: TProjectGLRecord);
- procedure CopyDetailGL(ARec: TDetailGLRecord);
- procedure CopyData(ABillsID: Integer);
- procedure LoadProjectGLsFromXml(AXmlNode: IXMLNode);
- procedure LoadDetailGLsFromXml(AXmlNode: IXMLNode);
- procedure Clear;
- protected
- procedure SaveXmlData(AXmlDoc: IXmlDocument); override;
- procedure LoadXmlData(AXmlDoc: IXmlDocument); override;
- public
- constructor Create(AProjectData: TObject);
- destructor Destroy; override;
- procedure Copy(ABillsID: Integer);
- //procedure Paste
- end;
- function HasDetailGLBlockFormat: Boolean;
- implementation
- uses
- ProjectData, sdDB;
- var
- CF_DetailGLBlock: Word;
- function HasDetailGLBlockFormat: Boolean;
- begin
- Result := HasClipboardFormat(CF_DetailGLBlock);
- end;
- { TDetailGLNode }
- procedure TDetailGLNode.LoadFromXmlNode(AXmlNode: IXMLNode);
- begin
- FGLID := AXmlNode.Attributes['GLID'];
- FCode := AXmlNode.Attributes['Code'];
- FQuantity := AXmlNode.Attributes['Quantity'];
- end;
- procedure TDetailGLNode.SaveToXmlNode(AXmlNode: IXMLNode);
- begin
- AXmlNode.Attributes['GLID'] := FGLID;
- AXmlNode.Attributes['Code'] := FCode;
- AXmlNode.Attributes['Quantity'] := FQuantity;
- end;
- { TProjectGLNode }
- procedure TProjectGLNode.LoadFromXmlNode(AXmlNode: IXMLNode);
- begin
- FID := AXmlNode.Attributes['ID'];
- FCode := AXmlNode.Attributes['Code'];
- FName := AXmlNode.Attributes['Name'];
- FUnits := AXmlNode.Attributes['Units'];
- FSpecs := AXmlNode.Attributes['Specs'];
- FBasePrice := AXmlNode.Attributes['BasePrice'];
- FRiskRange := AXmlNode.Attributes['RiskRange'];
- FInfoPrice := AXmlNode.Attributes['InfoPrice'];
- FInfoDate := AXmlNode.Attributes['InfoDate'];
- end;
- procedure TProjectGLNode.SaveToXmlNode(AXmlNode: IXMLNode);
- begin
- AXmlNode.Attributes['ID'] := FID;
- AXmlNode.Attributes['Code'] := FCode;
- AXmlNode.Attributes['Name'] := FName;
- AXmlNode.Attributes['Units'] := FUnits;
- AXmlNode.Attributes['Specs'] := FSpecs;
- AXmlNode.Attributes['BasePrice'] := FBasePrice;
- AXmlNode.Attributes['RiskRange'] := FRiskRange;
- AXmlNode.Attributes['InfoPrice'] := FInfoPrice;
- AXmlNode.Attributes['InfoDate'] := FInfoDate;
- end;
- { TDetailGL_Clipboard }
- procedure TDetailGL_Clipboard.Clear;
- begin
- ClearObjects(FDetailGls);
- ClearObjects(FProjectGLs);
- end;
- procedure TDetailGL_Clipboard.Copy(ABillsID: Integer);
- begin
- Clear;
- CopyData(ABillsID);
- SaveToStream;
- SaveToClipboard(CF_DetailGLBlock);
- end;
- procedure TDetailGL_Clipboard.CopyData(ABillsID: Integer);
- var
- vGLs: TList;
- iGL: Integer;
- Rec: TDetailGLRecord;
- begin
- vGLs := TList.Create;
- try
- FDetailGLData.LoadDetailGLs(ABillsID, vGLs);
- for iGL := 0 to vGLs.Count - 1 do
- begin
- Rec := TDetailGLRecord(vGLs.Items[iGL]);
- CopyDetailGL(Rec);
- end;
- finally
- vGLs.Free;
- end;
- end;
- procedure TDetailGL_Clipboard.CopyDetailGL(ARec: TDetailGLRecord);
- var
- DetailGL: TDetailGLNode;
- begin
- DetailGL := TDetailGLNode.Create;
- FDetailGls.Add(DetailGL);
- DetailGL.FGLID := ARec.GLID.AsInteger;
- DetailGL.FCode := ARec.Code.AsString;
- DetailGL.FQuantity := ARec.Quantity.AsFloat;
- CopyProjectGL(ARec.RelaProjectGL);
- end;
- procedure TDetailGL_Clipboard.CopyProjectGL(ARec: TProjectGLRecord);
- var
- ProjectGL: TProjectGLNode;
- begin
- ProjectGL := TProjectGLNode.Create;
- FProjectGLs.Add(ProjectGL);
- ProjectGL.FID := ARec.ID.AsInteger;
- ProjectGL.FCode := ARec.Code.AsString;
- ProjectGL.FName := ARec.Name.AsString;
- ProjectGL.FUnits := ARec.Units.AsString;
- ProjectGL.FSpecs := ARec.Specs.AsString;
- ProjectGL.FBasePrice := ARec.BasePrice.AsFloat;
- ProjectGL.FRiskRange := ARec.RiskRange.AsFloat;
- end;
- constructor TDetailGL_Clipboard.Create(AProjectData: TObject);
- begin
- inherited Create;
- FProjectGLs := TList.Create;
- FDetailGls := TList.Create;
- FProjectGLData := TProjectData(AProjectData).ProjectGLData;
- FDetailGLData := TProjectData(AProjectData).DetailGLData;
- end;
- destructor TDetailGL_Clipboard.Destroy;
- begin
- ClearObjects(FDetailGls);
- FDetailGls.Free;
- ClearObjects(FProjectGLs);
- FProjectGLs.Free;
- inherited;
- end;
- procedure TDetailGL_Clipboard.LoadDetailGLsFromXml(AXmlNode: IXMLNode);
- var
- Parent, Cur: IXMLNode;
- iGL: Integer;
- DetailGL: TDetailGLNode;
- begin
- Parent := AXmlNode.ChildNodes.FindNode('DetailGLs');
- for iGL := 0 to AXmlNode.ChildNodes.Count - 1 do
- begin
- Cur := AXmlNode.ChildNodes.FindNode('DetailGL');
- DetailGL := TDetailGLNode.Create;
- FDetailGls.Add(DetailGL);
- DetailGL.LoadFromXmlNode(Cur);
- end;
- end;
- procedure TDetailGL_Clipboard.LoadProjectGLsFromXml(AXmlNode: IXMLNode);
- var
- Parent, Cur: IXMLNode;
- iGL: Integer;
- ProjectGL: TProjectGLNode;
- begin
- Parent := AXmlNode.ChildNodes.FindNode('ProjectGLs');
- for iGL := 0 to AXmlNode.ChildNodes.Count - 1 do
- begin
- Cur := AXmlNode.ChildNodes.FindNode('ProjectGL');
- ProjectGL := TProjectGLNode.Create;
- FProjectGLs.Add(ProjectGL);
- ProjectGL.LoadFromXmlNode(Cur);
- end;
- end;
- procedure TDetailGL_Clipboard.LoadXmlData(AXmlDoc: IXmlDocument);
- begin
- inherited;
- LoadDetailGLsFromXml(AXmlDoc.DocumentElement);
- LoadProjectGLsFromXml(AXmlDoc.DocumentElement);
- end;
- procedure TDetailGL_Clipboard.SaveDetailGLsToXml(AXmlNode: IXMLNode);
- var
- Parent, Cur: IXMLNode;
- i: Integer;
- DetailGL: TDetailGLNode;
- begin
- Parent := AXmlNode.AddChild('DetailGLs');
- for i := 0 to FDetailGls.Count - 1 do
- begin
- DetailGL := TDetailGLNode(FDetailGls.Items[i]);
- Cur := Parent.AddChild('DetailGL');
- DetailGL.SaveToXmlNode(Cur);
- end;
- end;
- procedure TDetailGL_Clipboard.SaveProjectGLsToXml(AXmlNode: IXMLNode);
- var
- Parent, Cur: IXMLNode;
- i: Integer;
- ProjectGL: TProjectGLNode;
- begin
- Parent := AXmlNode.AddChild('ProjectGLs');
- for i := 0 to FProjectGLs.Count - 1 do
- begin
- ProjectGL := TProjectGLNode(FProjectGLs.Items[i]);
- Cur := Parent.AddChild('ProjectGL');
- ProjectGL.SaveToXmlNode(Cur);
- end;
- end;
- procedure TDetailGL_Clipboard.SaveXmlData(AXmlDoc: IXmlDocument);
- begin
- inherited;
- SaveProjectGLsToXml(AXmlDoc.DocumentElement);
- SaveDetailGLsToXml(AXmlDoc.DocumentElement);
- end;
- initialization
- CF_DetailGLBlock := RegisterClipboardFormat('Zh.M.DetailGL');
- end.
|