unit uShoppingCart; interface uses Classes, SysUtils, IWAppForm, IWApplication, IWTypes, frProductTree, frTopBar, Controls, Forms, {frBottomBar,} IWBaseControl, IWControl, IWCompLabel, IWGrids, IWCompButton, IWVCLBaseControl, IWCompRectangle, IWHTMLControls, Graphics, IWCOlor; type TISFShoppingCart = class(TIWAppForm) rectMain: TIWRectangle; rectLeft: TIWRectangle; rectTitle: TIWRectangle; lblShoppingCart: TIWLabel; grdItems: TIWGrid; lblTotal: TIWLabel; lnkUpdateCart: TIWLink; lnkFinalize: TIWLink; LeftTree: TISFProductTree; TopBar: TISFTopBar; procedure IWAppFormCreate(Sender: TObject); procedure lnkUpdateCartClick(Sender: TObject); procedure lnkFinalizeClick(Sender: TObject); procedure LeftTreelnkSourceClick(Sender: TObject); protected procedure LoadCart; public end; implementation {$R *.dfm} uses DB, dmDieFlyDie, IWBaseForm, IWCompEdit, IWCompCheckBox, ServerController, uDisplayProduct, uDBInterface, uFinalize, uConstants; procedure TISFShoppingCart.IWAppFormCreate(Sender: TObject); begin // Load the product tree LeftTree.LoadTree; // Load the cart LoadCart; end; procedure TISFShoppingCart.LoadCart; var f, g : integer; LEdit : TIWEdit; LCheck : TIWCheckBox; LBigTotal : double; begin LBigTotal := 0; with dmFly.qrCart, grdItems do begin SQL.Clear; SQL.Add('SELECT Quantity, ProductID, Name, Price'); SQL.Add('FROM Cart, Products'); SQL.Add('WHERE Products.ID = ProductID AND SessionID = :ASessionID'); ParamByName('ASessionID').AsInteger := UserSession.CartUserID; Open; RowCount := 1; Cell[0, 0].Width := '40%'; Cell[0, 0].Text := 'Name'; Cell[0, 1].Width := '15%'; Cell[0, 1].Text := 'Quantity'; Cell[0, 2].Width := '15%'; Cell[0, 2].Text := 'Price per unit'; Cell[0, 3].Width := '15%'; Cell[0, 3].Text := 'Total price'; Cell[0, 4].Width := '15%'; Cell[0, 4].Text := 'Remove'; for f := 0 to 4 do begin Cell[0, f].Font.Style := [fsBold]; Cell[0, f].Alignment := taCenter; Cell[0, f].Height := IntToStr(lcHeaderCellHeight); end; f := 0; while not Eof do begin RowCount := RowCount + 1; Cell[f + 1, 0].Text := FieldByName('Name').AsString; Cell[f + 1, 0].Width := '40%'; LEdit := TIWEdit.Create(Self); LEdit.Parent := Self; LEdit.Text := FieldByName('Quantity').AsString; LEdit.Tag := FieldByName('ProductID').AsInteger; LEdit.Alignment := taLeftJustify; LEdit.Width := 50; Cell[f + 1, 1].Control := LEdit; Cell[f + 1, 1].Alignment := taRightJustify; Cell[f + 1, 1].Width := '15%'; Cell[f + 1, 2].Text := FormatFloat('###,###,###,###.00', FieldByName('Price').AsFloat); Cell[f + 1, 2].Alignment := taRightJustify; Cell[f + 1, 2].Width := '15%'; Cell[f + 1, 3].Text := FormatFloat('###,###,###,###.00', FieldByName('Price').AsFloat * FieldByName('Quantity').AsInteger); Cell[f + 1, 3].Alignment := taRightJustify; Cell[f + 1, 3].Width := '15%'; LBigTotal := LBigTotal + FieldByName('Price').AsFloat * FieldByName('Quantity').AsInteger; LCheck := TIWCheckBox.Create(Self); LCheck.Parent := Self; LCheck.Caption := ''; LCheck.Tag := FieldByName('ProductID').AsInteger; // LCheck.Hint := 'Check this box then press -Update cart- to remove product.'; Cell[f + 1, 4].Control := LCheck; Cell[f + 1, 4].Alignment := taCenter; Cell[f + 1, 4].Width := '15%'; for g := 0 to 4 do Cell[f + 1, g].Height := IntToStr(lcCellHeight); f := f + 1; Next; end; Close; RowCount := RowCount + 1; end; // Set colors for f := 0 to Pred(grdItems.RowCount) do for g := 0 to 4 do if f in [0, Pred(grdItems.RowCount)] then grdItems.Cell[f, g].BGColor := lcHeaderColor else if f mod 2 = 0 then grdItems.Cell[f, g].BGColor := lcEvenColor else grdItems.Cell[f, g].BGColor := lcOddColor; lblTotal.Top := grdItems.Top + grdItems.RowCount * lcCellHeight + 10; lblTotal.Caption := Format(lblTotal.Text, [FormatFloat('###,###,###,###.00', LBigTotal)]); lnkUpdateCart.Top := lblTotal.Top + lblTotal.Height + 20; lnkFinalize.Top := lnkUpdateCart.Top; end; procedure TISFShoppingCart.lnkUpdateCartClick(Sender: TObject); var f : integer; begin with dmFly.qrCart, grdItems do begin for f := 1 to RowCount - 2 do begin SQL.Clear; if TIWCheckBox(Cell[f, 4].Control).Checked then begin SQL.Add('DELETE FROM Cart'); SQL.Add('WHERE SessionID = :ASessionID AND ProductID = :AProductID'); ParamByName('ASessionID').AsInteger := UserSession.CartUserID; ParamByName('AProductID').AsInteger := TIWCheckBox(Cell[f, 4].Control).Tag; ExecSQL; end else begin SQL.Add('UPDATE Cart SET Quantity = :AQuantity'); SQL.Add('WHERE SessionID = :ASessionID AND ProductID = :AProductID'); ParamByName('ASessionID').AsInteger := UserSession.CartUserID; ParamByName('AProductID').AsInteger := TIWCheckBox(Cell[f, 4].Control).Tag; ParamByName('AQuantity').AsString := TIWEdit(Cell[f, 1].Control).Text; ExecSQL; end; end; end; LoadCart; end; procedure TISFShoppingCart.lnkFinalizeClick(Sender: TObject); begin if not UserSession.LoggedIn then UserSession.NeedLogin(TISFFinalize) else begin TIWAppForm(WebApplication.ActiveForm).Release; TISFFinalize.Create(WebApplication).Show; end; end; procedure TISFShoppingCart.LeftTreelnkSourceClick(Sender: TObject); begin LeftTree.lnkSourceClick(Sender); end; end.