home *** CD-ROM | disk | FTP | other *** search
- unit TestRig;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- XmlClasses, StdCtrls, ComCtrls;
-
- type
- TfrmTestRig = class(TForm)
- TV: TTreeView;
- procedure FormShow(Sender: TObject);
- private
- OrderTotal: Currency;
- procedure ProcessOrder;
- procedure PrepareCustomerInfo(BillDoc: TXmlDDocument;
- const CustomerNumber: String;
- CustomerInfoFrag: TXmlDDocumentFragment);
- procedure PrepareItemsInfo(BillDoc: TXmlDDocument;
- Items: TXmlDElement; ItemsFrag: TXmlDDocumentFragment);
- public
- end;
-
- var
- frmTestRig: TfrmTestRig;
-
- implementation
-
- {$R *.DFM}
-
- procedure TfrmTestRig.FormShow(Sender: TObject);
- begin
- ProcessOrder;
- end;
-
- procedure TfrmTestRig.ProcessOrder;
- var
- OrderDoc: TXmlDDocument;
- Order: TXmlDElement;
- Items: TXmlDElement;
- BillDoc: TXmlDDocument;
- Bill: TXmlDElement;
- WorkElement: TXmlDElement;
- CustFrag: TXmlDDocumentFragment;
- ItemsFrag: TXmlDDocumentFragment;
- CustomerNumber: String;
- begin
- // get order information
- OrderDoc := TXmlDDocument.Create;
- OrderDoc.LoadFromFile('Order.xml');
- Order := OrderDoc['Order'];
- CustomerNumber := Order['CustomerNumber'].AsString;
- Items := Order['Items'];
- // set up bill document
- OrderTotal := 0.0;
- BillDoc := TXmlDDocument.Create;
- Bill := BillDoc.CreateElement('CustomerBillingStatement');
- BillDoc.AppendChild(Bill);
- // first, set up customer header data
- CustFrag := BillDoc.CreateDocumentFragment;
- PrepareCustomerInfo(BillDoc, CustomerNumber, CustFrag);
- // next process items ordered
- ItemsFrag := BillDoc.CreateDocumentFragment;
- ItemsFrag.AppendChild(BillDoc.CreateElement('Items'));
- PrepareItemsInfo(BillDoc, Items, ItemsFrag);
- // build billing document
- WorkElement := BillDoc.CreateElement('BillingDate');
- WorkElement.AsDate := Date;
- Bill.AppendChild(WorkElement);
- Bill.AppendChild(CustFrag);
- Bill.AppendChild(ItemsFrag);
- WorkElement := BillDoc.CreateElement('AmountDue');
- WorkElement.AsCurrency := OrderTotal;
- Bill.AppendChild(WorkElement);
- TV.Items.Assign(BillDoc);
- TV.FullExpand;
- // wrap it up
- CustFrag.Free;
- ItemsFrag.Free;
- OrderDoc.Free;
- BillDoc.Free;
- end;
-
- procedure TfrmTestRig.PrepareCustomerInfo(BillDoc: TXmlDDocument;
- const CustomerNumber: String;
- CustomerInfoFrag: TXmlDDocumentFragment);
- var
- CustInfo: TXmlDElement;
- begin
- CustInfo := BillDoc.CreateElement('CustomerInformation');
- CustomerInfoFrag.AppendChild(CustInfo);
- CustInfo.AppendChild(BillDoc.CreateElement('Name',
- 'David M Baer'));
- CustInfo.AppendChild(BillDoc.CreateElement('Address',
- '100 Object Ave.'));
- CustInfo.AppendChild(BillDoc.CreateElement('City',
- 'Pascalville'));
- CustInfo.AppendChild(BillDoc.CreateElement('ZipCode',
- '12345-6789'));
- end;
-
- procedure TfrmTestRig.PrepareItemsInfo(BillDoc: TXmlDDocument;
- Items: TXmlDElement; ItemsFrag: TXmlDDocumentFragment);
- var
- ItemIterator: TXmlDElementIterator;
- Item: TXmlDElement;
- WorkElement: TXmlDElement;
- Quantity: Integer;
- Price: Currency;
- Tax: Currency;
- Shipping: Currency;
- procedure PrepareItem(Item: TXmlDElement);
- var
- OutItem: TXmlDElement;
- begin
- OutItem := BillDoc.CreateElement('Item');
- OutItem.AppendChild(BillDoc.CreateElement('Title',
- 'X.M.LLoyde, Symphony Nbr. ' +
- Copy(Item['CatalogNumber'].AsString, 6, 6)));
- Quantity := Item['Quantity'].AsInteger;
- Price := 5.99 * Quantity;
- Shipping := 2.59 * Quantity;
- Tax := (Price + Shipping) * 0.08;
- Tax := Trunc(Tax * 100.0) / 100.0;
- WorkElement := BillDoc.CreateElement('UnitPrice');
- WorkElement.AsCurrency := Price;
- OutItem.AppendChild(WorkElement);
- WorkElement := BillDoc.CreateElement('Shipping');
- WorkElement.AsCurrency := Shipping;
- OutItem.AppendChild(WorkElement);
- WorkElement := BillDoc.CreateElement('Tax');
- WorkElement.AsCurrency := Tax;
- OutItem.AppendChild(WorkElement);
- ItemsFrag.Elements[0].AppendChild(OutItem);
- OrderTotal := OrderTotal + Price + Shipping + Tax;
- end;
- begin
- ItemIterator := TXmlDElementIterator.Create(Items, 'Item');
- Item := ItemIterator.Next;
- while Item <> nil do
- begin
- PrepareItem(Item);
- Item := ItemIterator.Next;
- end;
- ItemIterator.Free;
- end;
-
- end.
-