home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue53 / XML / TestRig.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-12-06  |  4.3 KB  |  149 lines

  1. unit TestRig;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.     XmlClasses, StdCtrls, ComCtrls;
  8.  
  9. type
  10.   TfrmTestRig = class(TForm)
  11.     TV: TTreeView;
  12.     procedure FormShow(Sender: TObject);
  13.   private
  14.     OrderTotal: Currency;
  15.     procedure ProcessOrder;
  16.     procedure PrepareCustomerInfo(BillDoc: TXmlDDocument;
  17.         const CustomerNumber: String;
  18.         CustomerInfoFrag: TXmlDDocumentFragment);
  19.     procedure PrepareItemsInfo(BillDoc: TXmlDDocument;
  20.         Items: TXmlDElement; ItemsFrag: TXmlDDocumentFragment);
  21.   public
  22.   end;
  23.  
  24. var
  25.   frmTestRig: TfrmTestRig;
  26.  
  27. implementation
  28.  
  29. {$R *.DFM}
  30.  
  31. procedure TfrmTestRig.FormShow(Sender: TObject);
  32. begin
  33.   ProcessOrder;
  34. end;
  35.  
  36. procedure TfrmTestRig.ProcessOrder;
  37. var
  38.   OrderDoc: TXmlDDocument;
  39.   Order: TXmlDElement;
  40.   Items: TXmlDElement;
  41.   BillDoc: TXmlDDocument;
  42.   Bill: TXmlDElement;
  43.   WorkElement: TXmlDElement;
  44.   CustFrag: TXmlDDocumentFragment;
  45.   ItemsFrag: TXmlDDocumentFragment;
  46.   CustomerNumber: String;
  47. begin
  48.   // get order information
  49.   OrderDoc := TXmlDDocument.Create;
  50.   OrderDoc.LoadFromFile('Order.xml');
  51.   Order := OrderDoc['Order'];
  52.   CustomerNumber := Order['CustomerNumber'].AsString;
  53.   Items := Order['Items'];
  54.   // set up bill document
  55.   OrderTotal := 0.0;
  56.   BillDoc := TXmlDDocument.Create;
  57.   Bill := BillDoc.CreateElement('CustomerBillingStatement');
  58.   BillDoc.AppendChild(Bill);
  59.   // first, set up customer header data
  60.   CustFrag := BillDoc.CreateDocumentFragment;
  61.   PrepareCustomerInfo(BillDoc, CustomerNumber, CustFrag);
  62.   // next process items ordered
  63.   ItemsFrag := BillDoc.CreateDocumentFragment;
  64.   ItemsFrag.AppendChild(BillDoc.CreateElement('Items'));
  65.   PrepareItemsInfo(BillDoc, Items, ItemsFrag);
  66.   // build billing document
  67.   WorkElement := BillDoc.CreateElement('BillingDate');
  68.   WorkElement.AsDate := Date;
  69.   Bill.AppendChild(WorkElement);
  70.   Bill.AppendChild(CustFrag);
  71.   Bill.AppendChild(ItemsFrag);
  72.   WorkElement := BillDoc.CreateElement('AmountDue');
  73.   WorkElement.AsCurrency := OrderTotal;
  74.   Bill.AppendChild(WorkElement);
  75.   TV.Items.Assign(BillDoc);
  76.   TV.FullExpand;
  77.   // wrap it up
  78.   CustFrag.Free;
  79.   ItemsFrag.Free;
  80.   OrderDoc.Free;
  81.   BillDoc.Free;
  82. end;
  83.  
  84. procedure TfrmTestRig.PrepareCustomerInfo(BillDoc: TXmlDDocument;
  85.     const CustomerNumber: String;
  86.     CustomerInfoFrag: TXmlDDocumentFragment);
  87. var
  88.   CustInfo: TXmlDElement;
  89. begin
  90.   CustInfo := BillDoc.CreateElement('CustomerInformation');
  91.   CustomerInfoFrag.AppendChild(CustInfo);
  92.   CustInfo.AppendChild(BillDoc.CreateElement('Name',
  93.       'David M Baer'));
  94.   CustInfo.AppendChild(BillDoc.CreateElement('Address',
  95.       '100 Object Ave.'));
  96.   CustInfo.AppendChild(BillDoc.CreateElement('City',
  97.       'Pascalville'));
  98.   CustInfo.AppendChild(BillDoc.CreateElement('ZipCode',
  99.       '12345-6789'));
  100. end;
  101.  
  102. procedure TfrmTestRig.PrepareItemsInfo(BillDoc: TXmlDDocument;
  103.     Items: TXmlDElement; ItemsFrag: TXmlDDocumentFragment);
  104. var
  105.   ItemIterator: TXmlDElementIterator;
  106.   Item: TXmlDElement;
  107.   WorkElement: TXmlDElement;
  108.   Quantity: Integer;
  109.   Price: Currency;
  110.   Tax: Currency;
  111.   Shipping: Currency;
  112.   procedure PrepareItem(Item: TXmlDElement);
  113.   var
  114.     OutItem: TXmlDElement;
  115.   begin
  116.     OutItem := BillDoc.CreateElement('Item');
  117.     OutItem.AppendChild(BillDoc.CreateElement('Title',
  118.         'X.M.LLoyde, Symphony Nbr. ' +
  119.             Copy(Item['CatalogNumber'].AsString, 6, 6)));
  120.     Quantity := Item['Quantity'].AsInteger;
  121.     Price := 5.99 * Quantity;
  122.     Shipping := 2.59 * Quantity;
  123.     Tax := (Price + Shipping) * 0.08;
  124.     Tax := Trunc(Tax * 100.0) / 100.0;
  125.     WorkElement := BillDoc.CreateElement('UnitPrice');
  126.     WorkElement.AsCurrency := Price;
  127.     OutItem.AppendChild(WorkElement);
  128.     WorkElement := BillDoc.CreateElement('Shipping');
  129.     WorkElement.AsCurrency := Shipping;
  130.     OutItem.AppendChild(WorkElement);
  131.     WorkElement := BillDoc.CreateElement('Tax');
  132.     WorkElement.AsCurrency := Tax;
  133.     OutItem.AppendChild(WorkElement);
  134.     ItemsFrag.Elements[0].AppendChild(OutItem);
  135.     OrderTotal := OrderTotal + Price + Shipping + Tax;
  136.   end;
  137. begin
  138.   ItemIterator := TXmlDElementIterator.Create(Items, 'Item');
  139.   Item := ItemIterator.Next;
  140.   while Item <> nil do
  141.   begin
  142.     PrepareItem(Item);
  143.     Item := ItemIterator.Next;
  144.   end;
  145.   ItemIterator.Free;
  146. end;
  147.  
  148. end.
  149.