home *** CD-ROM | disk | FTP | other *** search
- DATABASE leads
- GLOBALS "globals.4gl"
-
- FUNCTION product()
- {
- The product function displays the f_listprod form and,
- depending on the user's input, it adds, deletes, or updates
- rows in the product table.
- }
- DEFINE pa_prod ARRAY[20] OF RECORD LIKE product.*,
- idx, iflag, scrn, cnt SMALLINT
-
- DECLARE c_prod CURSOR FOR
- SELECT *
- INTO pr_product.*
- FROM product
- ORDER BY pcode
- LET idx = 0
- FOREACH c_prod
- LET idx = idx + 1
- LET pa_prod[idx].* = pr_product.*
- END FOREACH
- CALL SET_COUNT(idx)
-
- CLEAR SCREEN
- OPEN FORM f_listprod FROM "f_listprod"
- DISPLAY FORM f_listprod
-
- INPUT ARRAY pa_prod WITHOUT DEFAULTS FROM sr_product.*
- BEFORE ROW
- LET idx = ARR_CURR()
- LET scrn = SCR_LINE()
- LET pr_product.* = pa_prod[idx].*
- LET iflag = 0
-
- ON KEY (CONTROL-B)
- LET pa_prod[idx].* = pr_product.*
- DISPLAY pa_prod[idx].* TO sr_product[scrn].*
- NEXT FIELD pcode
-
- AFTER FIELD pcode
- IF (pa_prod[idx].pcode IS NULL) THEN
- IF (pa_prod[idx].price IS NOT NULL
- OR pa_prod[idx].descrip IS NOT NULL) THEN
- ERROR "You must enter a product code."
- NEXT FIELD pcode
- END IF
- ELSE
- IF (pa_prod[idx].pcode != pr_product.pcode
- OR pr_product.pcode IS NULL) THEN
- SELECT COUNT(*)
- INTO cnt
- FROM product
- WHERE pcode = pa_prod[idx].pcode
- IF (cnt != 0) THEN
- ERROR "Product code must be unique."
- NEXT FIELD pcode
- END IF
- END IF
- END IF
-
- AFTER FIELD price
- IF (pa_prod[idx].price IS NULL
- AND (pa_prod[idx].pcode IS NOT NULL
- OR pa_prod[idx].descrip IS NOT NULL)) THEN
- ERROR "You must enter a price."
- NEXT FIELD price
- END IF
-
- AFTER FIELD descrip
- IF (pa_prod[idx].descrip IS NULL
- AND (pa_prod[idx].pcode IS NOT NULL
- OR pa_prod[idx].price IS NOT NULL)) THEN
- ERROR "You must enter a description."
- NEXT FIELD descrip
- END IF
-
- BEFORE INSERT
- INITIALIZE pr_product.* TO NULL
-
- AFTER INSERT
- LET iflag = -1
- LET eflag = 0
- IF (pa_prod[idx].pcode IS NOT NULL) THEN
- WHENEVER ERROR CONTINUE
- INSERT INTO product VALUES (pa_prod[idx].*)
- IF (status < 0) THEN LET eflag = -1 END IF
- WHENEVER ERROR STOP
- ELSE
- LET eflag = -1
- END IF
- IF (eflag < 0) THEN
- ERROR "An error has occurred. Please enter the information again."
- INITIALIZE pa_prod[idx].* TO NULL
- CLEAR sr_product[scrn].*
- LET eflag = 0
- END IF
-
- AFTER DELETE
- LET iflag = -1
- DELETE FROM product WHERE pcode = pr_product.pcode
-
- AFTER ROW
- {All nulls, set flag to ignore row.}
- IF (pa_prod[idx].pcode IS NULL
- AND pa_prod[idx].price IS NULL
- AND pa_prod[idx].descrip IS NULL) THEN
- LET iflag = -1
- END IF
-
- {User made a change to the row: update.}
- IF (iflag = 0
- AND (pr_product.pcode != pa_prod[idx].pcode
- OR pr_product.price != pa_prod[idx].price
- OR pr_product.descrip != pa_prod[idx].descrip)) THEN
- UPDATE product SET
- product.* = pa_prod[idx].*
- WHERE pcode = pr_product.pcode
- END IF
-
- {User entered new data in a previously null row: insert.}
- IF (iflag = 0
- AND (pa_prod[idx].pcode IS NOT NULL
- AND pr_product.pcode IS NULL)) THEN
- WHENEVER ERROR CONTINUE
- INSERT INTO product VALUES (pa_prod[idx].*)
- IF (status < 0) THEN
- ERROR "An error has occurred. Please enter the information again."
- INITIALIZE pa_prod[idx].* TO NULL
- CLEAR sr_product[scrn].*
- END IF
- WHENEVER ERROR STOP
- END IF
- END INPUT
- CLEAR SCREEN
- END FUNCTION
-