LOCAL loForm
loForm = NEWOBJECT("clsForm")
loForm.Visible = .T.
loform.Show
READ Events
CLOSE ALL
CLEAR ALL
RETURN
**********
DEFINE CLASS clsForm AS form
Height = 720
Width = 720
Autocenter = .T.
Borderstyle = 2
MinButton = .F.
MaxButton = .F.
Themes = .F.
ShowTips = .T.
Caption = "Suppliers"
DIMENSION laSuppliers[1]
ADD OBJECT lblName as Label WITH ;
Top = 24, ;
Left = 24, ;
AutoSize = .T. , ;
Caption = "Supplier Name"
ADD OBJECT lblAddress as Label WITH ;
Top = 24, ;
Left = 24 + 120 + 12, ;
AutoSize = .T. , ;
Caption = "Adresse"
ADD OBJECT lblCity as Label WITH ;
Top = 24, ;
Left = 156 + 120 + 12, ;
AutoSize = .T. , ;
Caption = "City"
ADD OBJECT lblSearchSupplier as Label WITH ;
Top = 24, ;
Left = 420, ;
AutoSize = .T. , ;
Caption = "Search Supplier Name"
ADD OBJECT lblProduct as Label WITH ;
Top = 90, ;
Left = 24, ;
AutoSize = .T. , ;
FontBold = .T. , ;
Caption = "Supplier - Product - Stock location"
ADD OBJECT lblInSupStock as Label WITH ;
Top = 420, ;
Left = 24, ;
AutoSize = .T. , ;
FontBold = .T. , ;
Caption = "Product - Supplier - In Stock (by Supplier)"
ADD OBJECT lblInProStock as Label WITH ;
Top = 420, ;
Left = 366, ;
AutoSize = .T. , ;
FontBold = .T. , ;
Caption = "Product - Supplier - In Stock (by Product)"
ADD OBJECT txtName as TextBox WITH ;
Top = 48, ;
Left = 24, ;
Width = 120, ;
ControlSource = "Suppliers.cName", ;
ReadOnly = .T., ;
DisabledBackColor = RGB(0, 240, 240)
ADD OBJECT txtAddress as TextBox WITH ;
Top = 48, ;
Left = 24 + 120 + 12, ;
Width = 120, ;
ControlSource = "Suppliers.cAddress", ;
ReadOnly = .T., ;
DisabledBackColor = RGB(0, 240, 240)
ADD OBJECT txtCity as TextBox WITH ;
Top = 48, ;
Left = 156 + 120 + 12, ;
Width = 120, ;
ControlSource = "Suppliers.cCity", ;
ReadOnly = .T., ;
DisabledBackColor = RGB(0, 240, 240)
ADD OBJECT cboSuppliers as ComboBox WITH ;
Style = 2, ;
Top = 48, ;
Left = 420, ;
Width = 252, ;
RowSourceType = 5, ;
RowSource = "ThisForm.laSuppliers", ;
ColumnCount = 2, ;
ColumnWidths = "228, 0", ;
IncrementalSearch = .T.
PROCEDURE cboSuppliers.GotFocus()
*!* You don't want to have too many items in the COMBOBOX hence you might want to filter with WHERE
Select ALLTRIM(cName) ;
FROM Suppliers ;
WHERE .T. ;
ORDER BY 1 ;
INTO ARRAY ThisForm.laSuppliers
*!* DIMENSION ThisForm.laSuppliers[ALEN(ThisForm.laSuppliers) + 1]
*!* WITH ThisForm
*!* .laSuppliers[ALEN(ThisForm.laSuppliers, 1)] = "*** Record not found ***"
*!* ENDWITH
This.Requery()
ENDPROC
PROCEDURE cboSuppliers.LostFocus()
This.Click()
ENDPROC
PROCEDURE cboSuppliers.Click()
LOCAL lcSupplierName as character
lcSupplierName = This.List[This.Listindex, 1]
IF SUBSTR(ALLTRIM(lcSupplierName), 1, 3) = "***"
IF MESSAGEBOX("Do you want to add a record?", 4 + 32, "Add Record") = 6
WAIT WINDOW + "Your code to add a new record" TIMEOUT 3
ENDIF
ELSE
*!* You may SEEK or INDEXSEEK in a large and indexed table - in a small table LOCATE is fine
SELECT Suppliers
LOCATE FOR Suppliers.cName = lcSupplierName
Thisform.Refresh()
SELECT cName, cPName, dStockedIn, iQuantity, cSTLocation, iFloor, iRoom ;
FROM Suppliers ;
JOIN Products ON Suppliers.iSID = Products.iSId ;
JOIN StockLocation ON Products.iSTId = StockLocation.ISTId ;
WHERE cName = lcSupplierName ;
ORDER BY 1,2 ;
INTO CURSOR csrStock
WITH ThisForm.grdProducts
.RecordSource = "CSRSTOCK"
.Visible = .T.
.Refresh()
ENDWITH
SELECT cPName, cName, SUM(iQuantity) ;
FROM Products ;
JOIN Suppliers ON Suppliers.iSID = Products.iSID ;
GROUP BY 1, 2 ;
ORDER BY 2, 1 ;
INTO CURSOR csrInSupStock
WITH ThisForm.grdSupStock
.RecordSource = "CSRINSUPSTOCK"
.Visible = .T.
.Refresh()
ENDWITH
SELECT cPName, cName, SUM(iQuantity) ;
FROM Products ;
JOIN Suppliers ON Suppliers.iSID = Products.iSID ;
GROUP BY 1, 2 ;
ORDER BY 1, 2 ;
INTO CURSOR csrInProStock
WITH ThisForm.grdProStock
.RecordSource = "CSRINPROSTOCK"
.Visible = .T.
.Refresh()
ENDWITH
ENDIF
ENDPROC
Add Object grdProducts as Grid with;
Top = 114, ;
Left = 24, ;
Height = 300, ;
Width = ThisForm.Width - 48, ;
AllowRowSizing = .F., ;
DeleteMark = .F., ;
Visible = .F., ;
Anchor = 15, ;
ReadOnly = .T., ;
ColumnCount = 7
PROCEDURE grdProducts.Refresh()
WITH This
.Column1.Header1.Caption = "Supplier"
.Column1.Header1.FontBold = .T.
.Column1.Width = 120
.Column2.Header1.Caption = "Product"
.Column2.Header1.FontBold = .T.
.Column2.Width = 120
.Column3.Header1.Caption = "Date"
.Column3.Header1.FontBold = .T.
.Column3.Width = 90
.Column4.Header1.Caption = "Quantity"
.Column4.Header1.FontBold = .T.
.Column4.Width = 48
.Column5.Header1.Caption = "Location"
.Column5.Header1.FontBold = .T.
.Column5.Width = 90
.Column6.Header1.Caption = "Floor"
.Column6.Header1.FontBold = .T.
.Column6.Width = 48
.Column7.Header1.Caption = "Room"
.Column7.Header1.FontBold = .T.
.Column7.Width = 48
ENDWITH
ENDPROC
Add Object grdSupStock as Grid with;
Top = 438, ;
Left = 24, ;
Height = ThisForm.Height - 438 - 24, ;
Width = 330, ;
AllowRowSizing = .F., ;
DeleteMark = .F., ;
Visible = .F., ;
Anchor = 15, ;
ReadOnly = .T., ;
ColumnCount = 3
PROCEDURE grdSupStock.Refresh()
WITH This
.Column1.Header1.Caption = "Product"
.Column1.Header1.FontBold = .T.
.Column1.Width = 120
.Column2.Header1.Caption = "Supplier"
.Column2.Header1.FontBold = .T.
.Column2.Width = 120
.Column3.Header1.Caption = "Qty"
.Column3.Header1.FontBold = .T.
.Column3.Width = 48
ENDWITH
ENDPROC
Add Object grdProStock as Grid with;
Top = 438, ;
Left = 366, ;
Height = ThisForm.Height - 438 - 24, ;
Width = 330, ;
AllowRowSizing = .F., ;
DeleteMark = .F., ;
Visible = .F., ;
Anchor = 15, ;
ReadOnly = .T., ;
ColumnCount = 3
PROCEDURE grdProStock.Refresh()
WITH This
.Column1.Header1.Caption = "Product"
.Column1.Header1.FontBold = .T.
.Column1.Width = 120
.Column2.Header1.Caption = "Supplier"
.Column2.Header1.FontBold = .T.
.Column2.Width = 120
.Column3.Header1.Caption = "Qty"
.Column3.Header1.FontBold = .T.
.Column3.Width = 48
ENDWITH
ENDPROC
PROCEDURE Load
CREATE CURSOR Suppliers (iSID I AUTOINC NEXTVALUE 10, CName C(42), cAddress C(42), cCity c(42))
INSERT INTO Suppliers (cName, cAddress, cCity) values("Desmarets & Fils", "12 Grand-Rue", "1235 Gent")
INSERT INTO Suppliers (cName, cAddress, cCity) values("Deutz & Deutz", "112 Gehlach Allee", "15235 Munich")
INSERT INTO Suppliers (cName, cAddress, cCity) values("Los Olivos", "564 Calle Grande", "65235 Barcelona")
INSERT INTO Suppliers (cName, cAddress, cCity) values("Veuve Cliquot", "12, rue de Champs", "62254 Epernay")
INSERT INTO Suppliers (cName, cAddress, cCity) values("Caves Chablis", "54, rue des Vignes", "61546 Chablis")
LOCATE
CREATE CURSOR Products (iPID I AUTOINC NEXTVALUE 100, CPName C(42), dStockedIn D, iQuantity I, iSID I, iSTID I)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Champagne 75 cl", DATE() - INT(RAND() * 60), 5, 11, 1000)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Champagne 75 cl", DATE() - INT(RAND() * 60), 15, 11, 1000)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Champagne 150 cl", DATE() - INT(RAND() * 60), 5, 11, 1001)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Champagne 150 cl", DATE() - INT(RAND() * 60), 30, 13, 1001)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Olive Oil 75 cl", DATE() - INT(RAND() * 60), 5, 12, 1003)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Olive Oil 75 cl", DATE() - INT(RAND() * 60), 25, 12, 1003)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Olive Oil 75 cl", DATE() - INT(RAND() * 60), 35, 12, 1003)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Green Olives 500 gr", DATE() - INT(RAND() * 60), 25, 12, 1004)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Black Olives 250 gr", DATE() - INT(RAND() * 60), 25, 12, 1004)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Beer Pilsen 33 cl", DATE() - INT(RAND() * 60), 24, 10, 1002)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Beer Pilsen 33 cl", DATE() - INT(RAND() * 60), 48, 10, 1002)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Beer Blonde 33 cl", DATE() - INT(RAND() * 60), 24, 10, 1002)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Beer Blonde 33 cl", DATE() - INT(RAND() * 60), 12, 10, 1002)
INSERT INTO Products (cPName, dStockedIn, iQuantity, iSID, iSTid) VALUES ("Beer Brown 33 cl", DATE() - INT(RAND() * 60), 24, 10, 1002)
CREATE CURSOR StockLocation (iSTID I AUTOINC NEXTVALUE 1000, CSTLocation C(42), iFloor I, iRoom I)
INSERT INTO StockLocation (cSTLocation, iFloor, iRoom) values("Main Building", 1, 101)
INSERT INTO StockLocation (cSTLocation, iFloor, iRoom) values("Main Building", 1, 102)
INSERT INTO StockLocation (cSTLocation, iFloor, iRoom) values("Main Building", 1, 103)
INSERT INTO StockLocation (cSTLocation, iFloor, iRoom) values("Main Building", 2, 201)
INSERT INTO StockLocation (cSTLocation, iFloor, iRoom) values("Main Building", 2, 202)
INSERT INTO StockLocation (cSTLocation, iFloor, iRoom) values("Main Building", 2, 203)
SELECT Suppliers
ENDPROC
PROCEDURE Destroy
ThisForm.Release()
CLEAR EVENTS
ENDPROC
ENDDEFINE
**********