Mini Kabibi Habibi

Current Path : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/samples/tastrade/data/
Upload File :
Current File : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/samples/tastrade/data/tastrade.dct

�@
�orders.dbfOrder Information__ri_delete_orders()__ri_update_orders()__ri_insert_orders()	valorder()order_idst have at leas�user_lev.dbfgroup_id)User Level (Security) Information __ri_delete_user_level() __ri_update_user_level()�supplier.dbfsupplier_i&Inventory Supplier Information__ri_delete_supplier()__ri_update_supplier()�shippers.dbfshipper_idShipper Lookup Table__ri_delete_shippers()__ri_update_shippers()�products.dbfproduct_id%Product Inventory Information__ri_delete_products()__ri_update_products()__ri_insert_products()�orditems.dbf#Order Line Item Information&__ri_update_order_line_items()&__ri_insert_order_line_items()�employee.dbfemployee_iEmployee Information__ri_delete_employee()__ri_update_employee()__ri_insert_employee()�customer.dbfcustomer_iCustomer Information__ri_delete_customer()__ri_update_customer()�category.dbfcategory_i%Product Category Lookup Table__ri_delete_category()__ri_update_category()9&-#sum_unit_priceMY NOCPTRANS2&-#Orders.order_date	MD)&-
#exp_1MC(6)�.0$(,/�%d'����+orders,order_line_items*SELECT STR(YEAR(Orders.order_date),4)+STR(MONTH(Orders.order_date),2),  Orders.order_date, SUM(Order_line_items.unit_price) FROM tastrade!orders, tastrade!order_line_items WHERE Orders.order_id = Order_line_items.order_id GROUP BY 1, Orders.order_date)3&-#Supplier.phone
MC(24):&-#Supplier.contact_name
MC(30)3&-#Customer.phone
MC(24)2setup.dbfHolds unique keys##Name of table's primary keyThe next unique key1&-#Category.picture	MG/&-#Employee.notes	MM&&Contact name (e.g. Bill Scott)11Customer contact's title (e.g. President)22Customer's address (e.g. 1060 Main Street)++Customer's city (e.g. Bloomingdale)))Customer's region/state (e.g. CA)$$Customer's postal (zip) codeCustomer CountryCustomer's phone numberCustomer's fax number+"Customer's normal discount	0Customer's sales region:&-#Supplier.company_name
MC(40)5&-#Category.description	MMInternal group IDDescription of group11Name of action to perform when logging in:&-#Customer.contact_name
MC(30)4
employee_iemployeeemployee_i+newid()Internal supplier ID6&-#Employee.extensionMC(4)Contact's nameContact's titleSupplier's addressSupplier's citySupplier region$$Supplier's postal (zip) codeSupplier's countrySupplier's phone numberSupplier's fax number:&-#Customer.company_name
MC(40)4
shipper_idshippersshipper_id*newid()Internal shipper ID8&-#Employee.first_name
MC(10);&-#Category.category_name
MC(15)4
supplier_isuppliersupplier_i*newid()Internal product ID&&ID of supplier of this product44ID of category to which this product belongs7&-#Employee.last_name
MC(20)English name of productQuantity in each unit Unit priceUnit cost) Number of units in stock	0) Number of units on order	0Reorder level	0--True if product has been discontinued.
order_idordersorder_id4
category_icategorycategory_i4
customer_icustomercustomer_iInternal order IDInternal product IDUnit price of productQuantity	12
group_iduser_levelgroup_id4
product_idproductsproduct_id3&-#Employee.title
MC(30).newid()Unique ID of this order5&-#Customer.country
MC(15) DATE()Order datefSupplier's company name 	.NOT.EMPTY(company_name)'
"Company name cannot be empty."4&-#Customer.region
MC(15)5&-#tastrade!orders.paid	ML''ID of customer who placed orderShipper IDKnewid("order_number").Order number (automatically generated)Ship to nameShip to addressShip to cityShip to region!!Ship to postal (zip) codeShip to country'Order discount percent	0Total freight charges}DATE()+7	deliver_by=>order_date+
"Cannot be earlier than Order Date"$Date order must be deliveredMiscellaneous notes,Employee IDdefaultemployee()ployee()�/Customer's minimum allowed order amount$	min_order_amt<=max_order_amtR
"Minimum order amount must be less than or equal to maximum order amount."+newid()Internal employee ID2&-#Customer.city
MC(15)Employee's first nameEmployee's job titleEmployee's birth date Date employee was hiredEmployee's addressEmployee's city$$Employee's region (e.g., TX)$$Employee's postal (zip) codeEmployee country$$Employee's home phone number--Emploee's home phone number extension%%Internal group id of employee11Sales region employee is responsibile for-Employee's password"Tastrade"Employee's photoNotes about employeeXCustomer ID	.NOT.EMPTY(customer_id)&
"Customer ID cannot be empty."5&-#Customer.address
MC(60)+newid()Internal category ID3&-#Orders.deliver_by*	MY3&-#Orders.discountMN(2)Category descriptionCategory picture.0$(,/�%d'����+supplier�*SELECT Supplier.company_name, Supplier.contact_name, Supplier.phone FROM tastrade!supplier ORDER BY Supplier.company_name, Supplier.contact_name)h.0$(,/�%d'�����*SELECT STR(YEAR(Orders.order_date), 4) + STR(MONTH(Orders.order_date), 2),  SUM(Order_line_items.unit_price) AS sum_unit_price FROM tastrade!Orders, tastrade!Order_Line_Items WHERE Orders.order_id = Order_line_items.order_id GROUP BY 1)+rectclass)&-
#exp_1MC(6)8&-#Orders.ship_to_city
MC(15)9&-#sum_unit_priceMY NOCPTRANS.0$(,/�%d'����+customer�*SELECT Customer.company_name, Customer.contact_name, Customer.phone FROM tastrade!customer ORDER BY Customer.company_name, Customer.contact_name)�.0$(,/�%d'����+categoryd*SELECT Category.category_name, Category.description, Category.picture FROM tastrade!category)cShipper company name 	.NOT.EMPTY(company_name)'
"Company name cannot be empty."cFull name of product 	.NOT.EMPTY(product_name)'
"Product name cannot be empty."]Employee's last name	.NOT.EMPTY(last_name)$
"Last name cannot be empty.";
tastrade.h�����,..\..\foxpro.h���R�,	strings.h�����,;&-"#TASTRADE!ORDERS.deliver_by	MD;&-"#TASTRADE!ORDERS.order_date	MD<&- #TASTRADE!ORDERS.order_idMC(6)q*Company name (e.g. MJR Associates) 	.NOT.EMPTY(company_name)'
"Company name cannot be empty."k
8Name:Category name!	.NOT.EMPTY(category_name)(
"Category name cannot be empty."}.0$(,/�%d'����+employee�*SELECT Employee.title, Employee.last_name, Employee.first_name,  Employee.extension, Employee.notes FROM tastrade!employee WHERE Employee.title = ?cTitle ORDER BY Employee.title, Employee.last_name, Employee.first_name,  Employee.extension)cTitle,'C'8&-#Orders.ship_to_name
MC(40)�.0$(,/�%d'����+Z*SELECT Shippers.company_name FROM tastrade!Shippers ORDER BY Shippers.company_name))2&-#Orders.order_date	MD1&-#COMPANY_NAME
MC(40)name
:&-#Products.product_name
MC(40):&-#Shippers.company_name
MC(40)&.0$(,/�%d'����+�*SELECT Products.product_name, Products.quantity_in_unit,  Products.unit_price, Products.unit_cost FROM tastrade!Products ORDER BY Products.product_name, Products.quantity_in_unit))7&-#Orders.order_numberMC(6)1&-#PRODUCT_NAME
MC(40)name
9&-#Customer.postal_code
MC(10)5&-#QUANTITY_IN_UNIT
MC(20)uni:&-#Customer.company_name
MC(40)5&-#UNIT_PRICEMY NOCPTRANS@&-!#Order_line_items.quantityMN(12,3)4&-#UNIT_COSTMY NOCPTRANS.0$(,/�%d'����:+orders,order_line_items,customer,shippers,productsZ*SELECT Orders.order_number, Orders.order_date, Orders.ship_to_name,  Orders.ship_to_address, Orders.ship_to_city, Orders.ship_to_region,  Orders.ship_to_postal_code, Orders.ship_to_country, Orders.discount,  Orders.freight, Order_line_items.unit_price, Order_line_items.quantity,  Customer.company_name, Customer.address, Customer.city, Customer.region,  Customer.postal_code, Customer.country, Shippers.company_name,  Products.product_name FROM tastrade!orders, tastrade!order_line_items, tastrade!customer,  tastrade!shippers, tastrade!products WHERE Orders.order_id = Order_line_items.order_id   AND Orders.customer_id = Customer.customer_id   AND Orders.shipper_id = Shippers.shipper_id   AND Order_line_items.product_id = Products.product_id   AND Orders.order_date BETWEEN ?dDateFrom AND ?dDateTo ORDER BY Orders.order_date, Orders.order_number)!dDateFrom,'D';dDateTo,'D'*&-#custtotal	MY,&-#country
MC(15)1&-#company_name
MC(40)A&-%#tastrade!customer.customer_idMC(6)+&-#ordertotal	MY/&-#customer_idMC(6)&&-
#exp_1	ML;&-#Orders.ship_to_address
MC(60):&-#Orders.ship_to_region
MC(15)?&-"#Orders.ship_to_postal_code
MC(10);&-#Orders.ship_to_country
MC(15)9&-#Orders.freightMY NOCPTRANSF&-##Order_line_items.unit_priceMY NOCPTRANS@&-!#Order_line_items.quantityMN(12,3)<&-##Order_line_items.unit_price	MYNOCPTRANS:&-#Products.product_name
MC(40)=&-	MY$#Order_line_items.unit_price*it_price*�/Customer's maximum allowed order amount$	max_order_amt=>min_order_amtU
"Maximum order amount must be greater than or equal to minimum order amount."H&-,#tastrade!order_line_items.product_idMC(6)���� ����2!%�V�qt��UR���������T��CW��%�C�
��D�T��CCf���[�T��C�f���
T�����T��C�	REPROCESSv��GM(��%�C�SETUP�
����Q��tastrade!setup��F��"%�C��setup�key_name���-�%�CS��)�T������">���CCC��g�C��>Z��Z���
F����GM(����	B����UTCALIASLCALIASLCIDLCOLDREPROCESS	LNOLDAREATASTRADESETUPVALUE����������%�C�
�C����<�	B�����
T�����T��C�W��T��C��]��%Q��tastrade!customer�����%�C���
customer_i�����!T��C��.max_order_amt���Q���� Q��tastrade!orders����o�_ordersQ�
�order_line_itemsQ��C����	��
�{�G�z�?����	���Q�����������
���	���
	���������orderamounts�
K(�����Q��Q��
F����
B�����UTCCUSTOMERIDLYMAXORDERAMOUNT
LYTOTALORDERSLCCUSTOMERALIAS	LNOLDAREATASTRADE_ORDERSSUM
UNIT_PRICEQUANTITYDISCOUNTFREIGHT
TOTALORDERAORDER_IDORDER_LINE_ITEMSBCUSTOMER_IDPAIDORDERAMOUNTS�'�����������%�C'��7�B��T��CW�� %�C�order_line_items�
����&Q��tastrade!order_line_items��T��a���CT��CC�order_line_itemsN��C�order_line_itemsO��6��>T��C�
��order_line_items�order_id��
C��
�
	��%�����	��B�
#������%��
����M��C�*An order must have at least one line item.�0�Tasmanian Traders�x���T��C�
����
%������%�C�
��
����`%�C�paid�orders��C�2C����Ordersꐯ�	
�C�9��@�
frmordhistory	������)T��C�
��C�
�����6��%���
����T��C�1Customer is over their maximimun order amount by �$CCC���Z��C�
 �Save anyway?�$�Tasmanian Traders�x��T��������
%������`%�C�paid�orders��C�2C����Ordersꐯ�	
�C�9��@�
frmordhistory	����T��C��]��%Q��tastrade!customer�����"%�C�
���
customer_i����!T��C��.min_order_amt���Q����%���
����zT��C�&Customer order total must be at least �$CC���Z��C�
 �Save anyway?�$�Tasmanian Traders�x��T�����������
%������Q���
F����	B����ULLRETVALLNANSWERLLCLOSE
LNOLDRECNOLNORDERTOTAL	LNOLDAREALCCUSTOMERALIASLYMINORDAMOUNT
LYORDERAMOUNTTASTRADEORDERSORDER_IDORDER_LINE_ITEMS
PRODUCT_IDCALCMINORDAMOUNTCUSTOMER_ID
ACTIVEFORMNAMELYREMAININGCREDITREMAININGCREDITPAID������� %�C�order_line_items�
��b�%Q��tastrade!order_line_items�T��a���F��T��CC+���CO6��9K��
��(������	�{�G�z�?����%�������
#������
%������Q���	B����U	TCORDERIDLYORDERTOTALLLCLOSETASTRADEORDER_LINE_ITEMS
LNOLDRECNO
UNIT_PRICEQUANTITYORDERSDISCOUNTORDER_ID"�������� %�C�order_line_items�
��f�%Q��tastrade!order_line_items�T��a���T��CW��F��T��CC+���CO6��9K����(�����	�
�{�G�z�?����%�������
#������
%�����Q���F��
���	B����U	TCORDERIDLYORDERTOTALLLCLOSELISELECTTASTRADEORDER_LINE_ITEMS
LNOLDRECNO
UNIT_PRICEQUANTITYORDERSDISCOUNTORDER_ID����
T�����%�C�oAppb�O��=�T��C�����%�C������"Q��tastrade!employee���T������Q���	B����ULCEMPLOYEEIDOAPP
GETEMPLOYEEIDTASTRADEEMPEMPLOYEE_ID����T��a��%�C���C'
	�CS
��9�T��-���g�
%�C'
��c��T��������
Z#�CO��	B����ULLRETVALPNERROR���������T��a��%�C���CS
��@�T��-�����%�C������5��3T��CCC�tcCascadeParentb�C����6f��>�������T��������
Z#�CO��	B����UTCFIELDNAME
TCNEWVALUETCCASCADEPARENTLLRETVALPCCASCADEPARENTPNERROR'4���������T��C����+%�C�gaErrors[lnErrorRows,1]b�L����������C����T�������T�����������T�����������T�����������T�����������
T�����+�CC�t�
��O�,T��������C����,C�t��T�������T�����������T�����������T���������	��T���������
��T������	�����T������
�����T���������
��T�����������	B����UTNERRNO	TCMESSAGETCCODE	TCPROGRAMLNERRORROWSLNXXGAERRORSPCPARENTDBFPNPARENTREC
PCPARENTIDPCPARENTEXPR
PCCHILDDBF
PNCHILDREC	PCCHILDIDPCCHILDEXPR�4��������T��C��*����%������T��CW��F��T��CW��%�C��
����%Q������__riCCCWZA��������Q������__riCCCWZA���%������� T���C�f�?CCW�Z����
T���������!T��CC��C�>��\g��5T��C�C�f�*C��ZC�f�?C��Z���%�C��
����G(���(�����%�������
T�������
B����UTCTABLETCORDERLCCURWKAREALCNEWWKAREALNINUSESPOTPCRICURSORSPNERROR�4�������
%����(�����@�G���G ��%�C����[�{���~�ON ERROR &pcRIolderror.
������(�C�*������T��C�*������Q�CC���\g����%���ON����GA ��%���OFF��	�G��%���ON��&�G ��%��	�ON��C�G2 ��
H�T����C�
���i�G(���
C�����G(��
���B�a��U	TLSUCCESSLNXXLNSPOT
LCWORKAREAPCRIOLDERRORPCRICURSORSPCOLDCOMPAT	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDDBCJ4���5T��C�C�f�?C��ZC�f�*C��Z���B�a��UTCTABLENAMETCWKAREAPCRICURSORS���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE���������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���CATEGORY_ID��&T��C�products�
category_i���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���CATEGORY_ID��%��
����>��������Delete restrict rule violated.�����������C�products����%��
����%��=���������
F����	B�����%��=��������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREACATEGORY_IDRIOPENRIENDRIERRORRIREUSEZ���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�CATEGORY_ID�_��
T�����T���CATEGORY_ID��
T�����%�����!�T��C�products���%������%��=���
���-���
F����B�-���T��C�&��
F����~�������T��CO��
T�����T���CATEGORY_ID��%��
����!��+T��C�CATEGORY_ID��CATEGORY������C�products����%��
���%��=��������
F����	B������%��=���@�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREACATEGORY_IDRIOPENRIENDRIUPDATERIREUSE���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE���������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���CUSTOMER_ID��$T��C�orders�
customer_i���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���CUSTOMER_ID��%��
����>��������Delete restrict rule violated.�����������C�orders����%��
����%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREACUSTOMER_IDRIOPENRIENDRIERRORRIREUSEV���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�CUSTOMER_ID�_��
T�����T���CUSTOMER_ID��
T�����%������T��C�orders���%������%��=������-���
F����B�-���T��C�&��
F����~�������T��CO��
T�����T���CUSTOMER_ID��%��
����!��+T��C�CUSTOMER_ID��CUSTOMER������C�orders����%��
���%��=��������
F����	B������%��=���<�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREACUSTOMER_IDRIOPENRIENDRIUPDATERIREUSE���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE���������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���EMPLOYEE_ID��$T��C�orders�
employee_i���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���EMPLOYEE_ID��%��
����>��������Delete restrict rule violated.�����������C�orders����%��
����%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREAEMPLOYEE_IDRIOPENRIENDRIERRORRIREUSEg���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE������������������������T��CW��T��a��T��CW��D%��=��C�pccascadeparentb�C���
USER_LEVEL
��E�
F����
T�����T��C�GROUP_ID�_��T��C�&��T��C�O��
T�����T���GROUP_ID��%�����A�&T��C�
user_level�group_id���%�����p�%��=���[���-���
F����B�-���T��C�&��T��C�����T��C�O����C�
user_level����%��
��=�>��������Insert restrict rule violated.��������%��=���&�����
F����	B�������
T�����
F����T��C&��T��CO��T��C�EMPLOYEE_ID�_��
T�����T���EMPLOYEE_ID��
T��� ��%�����.�T��C�orders���%�����.�%��=������-���
F����B�-���T��C�&��
F����~�� �����T��CO��
T��� ��T���EMPLOYEE_ID��%��
����!��+T��C�EMPLOYEE_ID��EMPLOYEE�!�����C�orders����%��
��*�%��=��������
F����	B������%��=���M�����
F����	B����U"LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREAPCCASCADEPARENTGROUP_IDRIOPENRIENDRIREUSERIERROREMPLOYEE_IDRIUPDATE����T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE���������������T��CW��T��a��T��CW��
F����
T�����T��C�&��T��C�O��
T�����T���GROUP_ID��&T��C�
user_level�group_id���%�������%��=�������-���
F����B�-���T��C�&��T��C�����T��C�O����C�
user_level����%��
����>��������Insert restrict rule violated.��������%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS	LCCHILDIDLCPARENTWKAREA
LCCHILDWKAREALCSTARTAREAGROUP_IDRIOPENRIENDRIREUSERIERROR����T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE������������������������T��CW��T��a��T��CW��B%��=��C�pccascadeparentb�C���PRODUCTS
��E�
F����
T�����T��C�
PRODUCT_ID�_��T��C�&��T��C�O��
T�����T���
PRODUCT_ID��%�����A�&T��C�products�
product_id���%�����r�%��=���]���-���
F����B�-���T��C�&��T��C�����T��C�O����C�products����%��
��=�>��������Insert restrict rule violated.��������%��=���&�����
F����	B�������@%��=��C�pccascadeparentb�C���ORDERS
��=�
F����
T��� ��T��C�ORDER_ID�_��T��C�&��T��C�O��
T�����T���ORDER_ID��%�����9�"T��C�orders�order_id���%�����l�%��=���W���-���
F����B�-���T��C�&��T��C�����T��C�O����C�orders����%��
��5�>��������Insert restrict rule violated.��������%��=��������
F����	B�������
T�����%��=���i�����
F����	B����U!LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREAPCCASCADEPARENT
PRODUCT_IDRIOPENRIENDRIREUSERIERRORORDER_ID{���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE���������������T��CW��T��a��T��CW��
F����
T�����T��C�&��T��C�O��
T�����T���
PRODUCT_ID��&T��C�products�
product_id���%�������%��=�������-���
F����B�-���T��C�&��T��C�����T��C�O����C�products����%��
����>��������Insert restrict rule violated.��������%��=���������
F����	B�����
F����
T�����T��C�&��T��C�O��
T�����T���ORDER_ID��"T��C�orders�order_id���%�����y�%��=���d���-���
F����B�-���T��C�&��T��C�����T��C�O����C�orders����%��
��B�>��������Insert restrict rule violated.��������%��=���+�����
F����	B�����%��=���a�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS	LCCHILDIDLCPARENTWKAREA
LCCHILDWKAREALCSTARTAREA
PRODUCT_IDRIOPENRIENDRIREUSERIERRORORDER_ID����T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE���������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���ORDER_ID��,T��C�order_line_items�order_id���%�������%��=�������-���B�-���T��C�&��
F����	E����~+�����	��V�T��CO��
T�����T���ORDER_ID��T��C����!��C�order_line_items����%��
����%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREAORDER_IDRIOPENRIENDRIDELETERIREUSEy
���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE������������������������T��CW��T��a��T��CW��B%��=��C�pccascadeparentb�C���CUSTOMER
��G�
F����
T�����T��C�CUSTOMER_ID�_��T��C�&��T��C�O��
T�����T���CUSTOMER_ID��%�����C�&T��C�customer�
customer_i���%�����t�%��=���_���-���
F����B�-���T��C�&��T��C�����T��C�O����C�customer����%��
��?�>��������Insert restrict rule violated.��������%��=���(�����
F����	B�������B%��=��C�pccascadeparentb�C���SHIPPERS
��K�
F����
T��� ��T��C�
SHIPPER_ID�_��T��C�&��T��C�O��
T�����T���
SHIPPER_ID��%�����G�&T��C�shippers�
shipper_id���%�����x�%��=���c���-���
F����B�-���T��C�&��T��C�����T��C�O����C�shippers����%��
��C�>��������Insert restrict rule violated.��������%��=���,�����
F����	B�������B%��=��C�pccascadeparentb�C���EMPLOYEE
��Q�
F����
T���!��T��C�EMPLOYEE_ID�_��T��C�&��T��C�O��
T�����T���EMPLOYEE_ID��%�����M�&T��C�employee�
employee_i���%�����~�%��=���i���-���
F����B�-���T��C�&��T��C�����T��C�O����C�employee����%��
��I�>��������Insert restrict rule violated.��������%��=���2�����
F����	B�������
T�����
F����T��C&��T��CO��T��C�ORDER_ID�_��
T�����T���ORDER_ID��
T���"��%�����@
�!T��C�order_line_items���%�����>	�%��=���)	���-���
F����B�-���T��C�&��
F����~��"����	�T��CO��
T���"��T���ORDER_ID��%��
���	�!��&T��C�ORDER_ID��ORDERS�#���!��C�order_line_items����%��
��<
�%��=���%
�����
F����	B������%��=���_
�����
F����	B����U$LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREAPCCASCADEPARENTCUSTOMER_IDRIOPENRIENDRIREUSERIERROR
SHIPPER_IDEMPLOYEE_IDORDER_IDRIUPDATE���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE���������������T��CW��T��a��T��CW��
F����
T�����T��C�&��T��C�O��
T�����T���CUSTOMER_ID��&T��C�customer�
customer_i���%�������%��=�������-���
F����B�-���T��C�&��T��C�����T��C�O����C�customer����%��
����>��������Insert restrict rule violated.��������%��=���������
F����	B�����
F����
T�����T��C�&��T��C�O��
T�����T���
SHIPPER_ID��&T��C�shippers�
shipper_id���%�������%��=���k���-���
F����B�-���T��C�&��T��C�����T��C�O����C�shippers����%��
��K�>��������Insert restrict rule violated.��������%��=���4�����
F����	B�����
F����
T�����T��C�&��T��C�O��
T�����T���EMPLOYEE_ID��&T��C�employee�
employee_i���%������%��=�������-���
F����B�-���T��C�&��T��C�����T��C�O����C�employee����%��
����>��������Insert restrict rule violated.��������%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS	LCCHILDIDLCPARENTWKAREA
LCCHILDWKAREALCSTARTAREACUSTOMER_IDRIOPENRIENDRIREUSERIERROR
SHIPPER_IDEMPLOYEE_ID)���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE���������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���
PRODUCT_ID��.T��C�order_line_items�
product_id���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���
PRODUCT_ID��%��
����>��������Delete restrict rule violated.���������!��C�order_line_items����%��
����%��=���������
F����	B�����%��=��������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA
PRODUCT_IDRIOPENRIENDRIERRORRIREUSE���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE������������������������T��CW��T��a��T��CW��B%��=��C�pccascadeparentb�C���CATEGORY
��G�
F����
T�����T��C�CATEGORY_ID�_��T��C�&��T��C�O��
T�����T���CATEGORY_ID��%�����C�&T��C�category�
category_i���%�����t�%��=���_���-���
F����B�-���T��C�&��T��C�����T��C�O����C�category����%��
��?�>��������Insert restrict rule violated.��������%��=���(�����
F����	B�������B%��=��C�pccascadeparentb�C���SUPPLIER
��M�
F����
T��� ��T��C�SUPPLIER_ID�_��T��C�&��T��C�O��
T�����T���SUPPLIER_ID��%�����I�&T��C�supplier�
supplier_i���%�����z�%��=���e���-���
F����B�-���T��C�&��T��C�����T��C�O����C�supplier����%��
��E�>��������Insert restrict rule violated.��������%��=���.�����
F����	B�������
T�����
F����T��C&��T��CO��T��C�
PRODUCT_ID�_��
T�����T���
PRODUCT_ID��
T���!��%�����F�!T��C�order_line_items���%�����>�%��=���)���-���
F����B�-���T��C�&��
F����~��!�����T��CO��
T���!��T���
PRODUCT_ID��%��
����!��*T��C�
PRODUCT_ID��PRODUCTS�"���!��C�order_line_items����%��
��B�%��=���+�����
F����	B������%��=���e�����
F����	B����U#LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREAPCCASCADEPARENTCATEGORY_IDRIOPENRIENDRIREUSERIERRORSUPPLIER_ID
PRODUCT_IDRIUPDATE����T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE���������������T��CW��T��a��T��CW��
F����
T�����T��C�&��T��C�O��
T�����T���CATEGORY_ID��&T��C�category�
category_i���%�������%��=�������-���
F����B�-���T��C�&��T��C�����T��C�O����C�category����%��
����>��������Insert restrict rule violated.��������%��=���������
F����	B�����
F����
T�����T��C�&��T��C�O��
T�����T���SUPPLIER_ID��&T��C�supplier�
supplier_i���%�������%��=���l���-���
F����B�-���T��C�&��T��C�����T��C�O����C�supplier����%��
��L�>��������Insert restrict rule violated.��������%��=���5�����
F����	B�����%��=���k�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS	LCCHILDIDLCPARENTWKAREA
LCCHILDWKAREALCSTARTAREACATEGORY_IDRIOPENRIENDRIREUSERIERRORSUPPLIER_ID���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE���������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���
SHIPPER_ID��$T��C�orders�
shipper_id���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���
SHIPPER_ID��%��
����>��������Delete restrict rule violated.�����������C�orders����%��
����%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA
SHIPPER_IDRIOPENRIENDRIERRORRIREUSER���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�
SHIPPER_ID�_��
T�����T���
SHIPPER_ID��
T�����%������T��C�orders���%������%��=������-���
F����B�-���T��C�&��
F����~�������T��CO��
T�����T���
SHIPPER_ID��%��
����!��*T��C�
SHIPPER_ID��SHIPPERS������C�orders����%��
���%��=���������
F����	B������%��=���8�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA
SHIPPER_IDRIOPENRIENDRIUPDATERIREUSE���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE���������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���SUPPLIER_ID��&T��C�products�
supplier_i���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���SUPPLIER_ID��%��
����>��������Delete restrict rule violated.�����������C�products����%��
����%��=���������
F����	B�����%��=��������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREASUPPLIER_IDRIOPENRIENDRIERRORRIREUSEZ���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�SUPPLIER_ID�_��
T�����T���SUPPLIER_ID��
T�����%�����!�T��C�products���%������%��=���
���-���
F����B�-���T��C�&��
F����~�������T��CO��
T�����T���SUPPLIER_ID��%��
����!��+T��C�SUPPLIER_ID��SUPPLIER������C�products����%��
���%��=��������
F����	B������%��=���@�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREASUPPLIER_IDRIOPENRIENDRIUPDATERIREUSE���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE���������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���GROUP_ID��$T��C�employee�group_id���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���GROUP_ID��%��
��}�>��������Delete restrict rule violated.�����������C�employee����%��
����%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREAGROUP_IDRIOPENRIENDRIERRORRIREUSEP���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��TASTRADE������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�GROUP_ID�_��
T�����T���GROUP_ID��
T�����%������T��C�employee���%������%��=������-���
F����B�-���T��C�&��
F����~�������T��CO��
T�����T���GROUP_ID��%��
����!��*T��C�GROUP_ID��
USER_LEVEL������C�employee����%��
���%��=���������
F����	B������%��=���6�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREAGROUP_IDRIOPENRIENDRIUPDATERIREUSENewID,��RemainingCredit���ValOrder���CalcMinOrdAmount�
��CalcOrdTotal��DefaultEmployee�
��RIDELETE���RIUPDATE8��rierror^��riopen1��riendG��rireuseX��__RI_DELETE_category���__RI_UPDATE_categoryB��__RI_DELETE_customer#��__RI_UPDATE_customer�(��__RI_DELETE_employeeP.��__RI_UPDATE_employee�3��__RI_INSERT_employee�;��__RI_UPDATE_order_line_itemsA��__RI_INSERT_order_line_itemsI��__RI_DELETE_orders�O��__RI_UPDATE_orders/U��__RI_INSERT_ordersZa��__RI_DELETE_products�i��__RI_UPDATE_productsWo��__RI_INSERT_products~y��__RI_DELETE_shippers[���__RI_UPDATE_shippers̅��__RI_DELETE_supplier����__RI_UPDATE_supplier
���__RI_DELETE_user_levelٖ��__RI_UPDATE_user_levelF���3q4����A��sR�Aq"�"AAA���4q4��A��Q�A��
�����4y�AA�a�A2���A��AB�5r��v!AA�Q!A��!AAAAA��A��4q�Q�Aq���A��A�5q�Q�A�q���A��A��5q��A�!�A�7q�����AAA��2�q�A��1q1AA��21�1��A�����1�A���������3��q���R��A��A�R1A�AA�3q��Q�aAaA����A��QA1aAAaA1aA1aA��a�Aq3�Rq4q���Qr1aaA�aaa��Q���qA1�AAqqqq�������a�AqA�1������A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�AAqqqqqqq������������A�qA��!����AA�A���A��AA�A��6q���Qr1aaA�aaa��Q���qA1�AAqqqq�������A�AqA�1������Aq��A��A�A��5r���Qr1aaA�aaa��Q���qA1�AAqqqqqqq����������q�A�qA��!����AA�Aq��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�AAqqqq�������A�AqA�1������Aq��A��A�A��5r���Qr1aaA�aaa��Q���qA1�AAqqqqqqq���A������Qa�A�qA�!�����A��AAA��������q�A�qA��!����AA�Aq��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�AAqqqq��������Qa�A�qA�!�����A��A�A��5r���Qr1aaA�aaa��Q���qA1�AAqqqqqqq���!������qa�A�qA�!�����A��AAA������Q!�A�qA�!�q���A��AAA��A��6q���Qr1aaA�aaa��Q���qA1�AAqqqq��������qa�A�qA�!�����A��A�����Q!�A�qA�!�q���A��A�A��6q���Qr1aaA�aaa��Q���qA1�AAqqqq������Q��AqA������Q�A��A��A�A��5r���Qr1aaA�aaa��Q���qA1�AAqqqqqqq���!�������a�A�qA�!�����A��AAA!������qa�A�qA�!�����A��AAA!�������a�A�qA�!�����A��AAA������Q��A�qA��!��Q�AAaA��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�AAqqqq���������a�A�qA�!�����A��A�����qa�A�qA�!�����A��A������a�A�qA�!�����A��A�A��6q���Qr1aaA�aaa��Q���qA1�AAqqqq������q��AqA�1���q��A��A��A�A��5r���Qr1aaA�aaa��Q���qA1�AAqqqqqqq���!�������a�A�qA�!�����A��AAA!�������a�A�qA�!�����A��AAA������q��A�qA��!��q�AA�A��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�AAqqqq���������a�A�qA�!�����A��A������a�A�qA�!�����A��A�A��6q���Qr1aaA�aaa��Q���qA1�AAqqqq������qA�AqA�1���q��Aq��A��A�A��5r���Qr1aaA�aaa��Q���qA1�AAqqqqqqq��������q�q�A�qA��!��q�AA�Aq��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�AAqqqq�������a�AqA�1������A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�AAqqqqqqq������������A�qA��!����AA�A���A��AA�A��6q���Qr1aaA�aaa��Q���qA1�AAqqqq������QA�AqA�1���Q��A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�AAqqqqqqq��������Q���A�qA��!��Q�AA�A���A��AA�A��3�"�+0��Xb�x�s�z���B������ !�!0$2�D$(O�$(�*p�*	,�+,"5�WD5W@��y@lIE��I�T�@�T�]���]Um5�wm[v�<�vX�������iǞ�M�'��G�w��t����M������K���0�%����6�<�A^U
8�w
������ �~)(	)���.0$(,PQR/�%d'����+tastrade!orders�*SELECT Orders.order_id, Orders.order_date, Orders.deliver_by, SUM((Orditems.unit_price*Orditems.quantity)-Orders.discount)*0.01*SUM((Orditems.unit_price*Orditems.quantity)+Orders.freight) AS ord_total, Orders.paid FROM  tastrade!orders  INNER JOIN tastrade!order_line_items Orditems  ON  Orders.order_id = Orditems.order_id WHERE  Orders.customer_id = ( ?customer.customer_id ) GROUP BY Orders.order_id, Orders.order_date, Orders.deliver_by, Orders.paid ORDER BY Orders.order_date DESC)customer_id,'C'�.0$(,PQR/�%d'����5*SELECT TOP 25 Customer.customer_id, Customer.company_name, Customer.country, SUM(Ordertotal.ordertotal) AS custtotal FROM  customer  INNER JOIN tastrade!ordertotal  ON  Customer.customer_id = Ordertotal.customer_id GROUP BY Customer.customer_id, Customer.company_name, Customer.country ORDER BY 4 DESC)+tastrade!customer�.0$(,/�%d'����!+tastrade!order_line_itemsb*SELECT .F., Products.product_name, Order_line_items.quantity,  Order_line_items.unit_price,  Order_line_items.unit_price*Order_line_items.quantity AS extension,  Order_line_items.product_id FROM tastrade!order_line_items, tastrade!products WHERE Products.product_id = Order_line_items.product_id   AND Order_line_items.order_id = ?orders.order_id)PQR)�#INCLUDE TASTRADE.H

FUNCTION NewID(tcAlias)
  LOCAL lcAlias, ;
        lcID, ;
        lcOldReprocess, ;
        lnOldArea

  lnOldArea = SELECT()
  
  IF PARAMETERS() < 1
    lcAlias = UPPER(ALIAS())
  ELSE
    lcAlias = UPPER(tcAlias)
  ENDIF
        
  lcID = ""
  lcOldReprocess = SET('REPROCESS')
  
  *-- Lock until user presses Esc
  SET REPROCESS TO AUTOMATIC

  IF !USED("SETUP")
    USE tastrade!setup IN 0
  ENDIF
  SELECT setup
      
  IF SEEK(lcAlias, "setup", "key_name")
    IF RLOCK()
      lcID = setup.value
      REPLACE setup.value WITH ;
              STR(VAL(ALLT(lcID)) + 1, LEN(setup.value))
      UNLOCK
    ENDIF
  ENDIF
    
  SELECT (lnOldArea)
  SET REPROCESS TO lcOldReprocess
  
  RETURN lcID
ENDFUNC

******************     
FUNCTION RemainingCredit(tcCustomerID)
  LOCAL lyMaxOrderAmount, ;
        lyTotalOrders, ;
        lcCustomerAlias, ;
        lnOldArea
        
  IF PARAMETERS() < 1 OR EMPTY(tcCustomerID)
    RETURN 0
  ENDIF
  
  lyMaxOrderAmount = 0
  
  lnOldArea = SELECT(0)
  lcCustomerAlias = SYS(2015)
  USE tastrade!customer AGAIN IN 0 ALIAS (lcCustomerAlias)
  IF SEEK(tcCustomerID, lcCustomerAlias, "customer_i")
    lyMaxOrderAmount = EVAL(lcCustomerAlias + ".max_order_amt")
  ENDIF
  USE IN (lcCustomerAlias)
  
  *-- We use the orders table again to avoid "Illegal 
  *-- recursion" errors.
  USE tastrade!orders AGAIN ALIAS _orders IN 0

  SELECT SUM((b.unit_price * b.quantity) - ;
      (a.discount * .01) * (b.unit_price * b.quantity) + a.freight) AS totalorder, a.order_id ;
    FROM _orders a, order_line_items b ;
   WHERE a.order_id = b.order_id AND ;
     a.customer_id = tcCustomerID AND ;
     !a.paid ;
   GROUP by a.order_id ;
    INTO CURSOR orderamounts

  SUM totalorder to lyTotalOrders

  USE IN _orders
  USE IN orderamounts

  SELECT (lnOldArea)
  
  RETURN lyMaxOrderAmount - lyTotalOrders
ENDFUNC   
       
******************
FUNCTION ValOrder()
  LOCAL llRetVal, ;
        lnAnswer, ;
        llClose, ;
        lnOldRecNo, ;
        lnOrderTotal, ;
        lnOldArea, ;
        lcCustomerAlias, ;
        lyMinOrdAmount, ;
        lyOrderAmount  
        
  *-- Don't bother checking if we're deleting the order
  IF DELETED()
    RETURN
  ENDIF

  lnOldArea = SELECT()
    
  *-- Check if we have at least one line item. Use the current
  *-- table if order_line_items is already opened to include
  *-- buffered records.
  IF !USED("order_line_items")
    USE tastrade!order_line_items AGAIN IN 0
    llClose = .T.
  ENDIF

  lnOldRecNo = IIF(RECCOUNT("order_line_items") > 0, RECNO("order_line_items"), 0)
  llRetVal = (SEEK(orders.order_id, "order_line_items", "order_id") AND ;
          !EMPTY(order_line_items.product_id))
  IF lnOldRecNo <> 0 AND llRetVal
    GO lnOldRecNo IN order_line_items
  ENDIF
  
  IF !llRetVal
    =MESSAGEBOX(ORDHASITEMS_LOC, ;
                MB_ICONEXCLAMATION, ;
                TASTRADE_LOC)
  ENDIF
  
  lyOrderAmount = CalcMinOrdAmount(orders.order_id)
  IF llRetVal
    *-- Check if customer is over credit limit. If 
    *-- customer id is empty, the order will not be saved
    *-- because customer_id is a required foreign key, enforced
    *-- by the RI triggers, so we don't even bother checking.
    IF !EMPTY(orders.customer_id)
      IF !(GETFLDSTATE("paid","orders") == 2 AND OCCURS("2",GETFLDSTATE(-1,"Orders")) == 1) AND ;
      	LOWER(_screen.ActiveForm.Name) # "frmordhistory"
        *- didn't just change paid, and isn't on order history screen
        LOCAL lyRemainingCredit
        lyRemainingCredit = RemainingCredit(orders.customer_id) + IIF(orders.paid, lyOrderAmount, 0)
        IF lyRemainingCredit < $0
          lnAnswer = ;
            MESSAGEBOX(CUSTOVERMAX_LOC + ;
                        DOLLAR_FORMAT3_LOC + ALLT(STR(ABS(lyRemainingCredit), 15, 2)) + DOLLAR_FORMAT2_LOC + CR + ;
                        SAVEANYWAY_LOC, ;
                     MB_ICONQUESTION + MB_YESNO, ;
                     TASTRADE_LOC)
          llRetVal = (lnAnswer = IDYES)
        ENDIF
      ENDIF
      
      IF llRetVal
        *-- Get the customer's minimum order amount
        IF !(GETFLDSTATE("paid","orders") == 2 AND OCCURS("2",GETFLDSTATE(-1,"Orders")) == 1) AND ;
   		  LOWER(_screen.ActiveForm.Name) # "frmordhistory"
          lcCustomerAlias = SYS(2015)
          USE tastrade!customer AGAIN IN 0 ALIAS (lcCustomerAlias)
          IF SEEK(orders.customer_id, lcCustomerAlias, "customer_i")
            lyMinOrdAmount = EVAL(lcCustomerAlias + ".min_order_amt")
          ENDIF
          USE IN (lcCustomerAlias)

          IF lyOrderAmount < lyMinOrdAmount
            lnAnswer = ;
              MESSAGEBOX(CUSTUNDERMIN_LOC + ;
                         DOLLAR_FORMAT3_LOC + ALLT(STR(lyMinOrdAmount, 15, 2)) + DOLLAR_FORMAT2_LOC + CR + ;
                         SAVEANYWAY_LOC, ;
                       MB_ICONQUESTION + MB_YESNO, ;
                       TASTRADE_LOC)
            llRetVal = (lnAnswer = IDYES)
          ENDIF
        ENDIF
      ENDIF
    ENDIF	&& marked as paid only
  ENDIF
 
  IF llClose
    USE IN order_line_items
  ENDIF
  
  SELECT (lnOldArea)
  
  RETURN llRetVal
ENDFUNC   

******************
FUNCTION CalcMinOrdAmount(tcOrderID)
  *-- Returns order amount
  *-- Assumes orders table is open and positioned on desired record
  LOCAL lyOrderTotal, ;
        llClose
          
  IF !USED("order_line_items")
    USE tastrade!order_line_items IN 0
    llClose = .T.
  ENDIF
  SELECT order_line_items

  lnOldRecNo = IIF(EOF(), 0, RECNO())
  SUM (unit_price * quantity) - ;
    (orders.discount * .01) * (unit_price * quantity) ;
    FOR order_id = tcOrderID ;
    TO lyOrderTotal 

  IF lnOldRecNo <> 0
    GO lnOldRecNo IN order_line_items
  ENDIF

  IF llClose
    USE IN order_line_items
  ENDIF
  
  RETURN lyOrderTotal 

ENDFUNC

******************
FUNCTION CalcOrdTotal(tcOrderID)
  *-- Returns total of order, after discount
  *-- Assumes orders table is open and positioned on desired record
  LOCAL lyOrderTotal, ;
        llClose,;
        liSelect
          
  IF !USED("order_line_items")
    USE tastrade!order_line_items IN 0
    llClose = .T.
  ENDIF
  liSelect = SELECT()
  SELECT order_line_items

  lnOldRecNo = IIF(EOF(), 0, RECNO())
  SUM (unit_price * quantity) - ;
    (orders.discount * .01) * (unit_price * quantity) ;
    FOR order_id = tcOrderID ;
    TO lyOrderTotal 

  IF lnOldRecNo <> 0
    GO lnOldRecNo IN order_line_items
  ENDIF

  IF llClose
    USE IN order_line_items
  ENDIF
  
  SELECT (m.liSelect)
  RETURN lyOrderTotal 

ENDFUNC

******************
FUNCTION DefaultEmployee()
  LOCAL lcEmployeeID
  *-- An order must have an employee ID associated with it
  *-- For the purposes of this sample application, we will 
  *-- attempt to use the employee ID for the currently logged in
  *-- employee. If the oApp object does not exist (i.e., we are not
  *-- running the application), we will attempt to retrieve an arbitrary
  *-- employee ID from the employee file
  lcEmployeeID = ""
  IF TYPE("oApp") == "O"
    lcEmployeeID = oApp.GetEmployeeID()
  ENDIF
  IF EMPTY(lcEmployeeID)
    USE tastrade!employee AGAIN IN 0 ALIAS emp
    lcEmployeeID = emp.employee_id
    USE IN emp
  ENDIF
  
  RETURN lcEmployeeID
ENDFUNC


*---------------------------------------------------------------------

**__RI_HEADER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_HEADER**
procedure RIDELETE
local llRetVal
llRetVal=.t.
 IF (ISRLOCKED() and !deleted()) OR !RLOCK()
    llRetVal=.F.
  ELSE
    IF !deleted()
      DELETE
      llRetVal=pnerror=0
    ENDIF not already deleted
  ENDIF
  UNLOCK RECORD (RECNO())
RETURN llRetVal

procedure RIUPDATE
lparameters tcFieldName,tcNewValue,tcCascadeParent
local llRetVal
llRetVal=.t.
 IF ISRLOCKED() OR !RLOCK()
    llRetVal=.F.
  ELSE
    IF EVAL(tcFieldName)<>tcNewValue
      PRIVATE pcCascadeParent
      pcCascadeParent=upper(iif(type("tcCascadeParent")<>"C","",tcCascadeParent))
      REPLACE (tcFieldName) WITH tcNewValue
      llRetVal=pnerror=0
    ENDIF values don't already match
  ENDIF it's locked already, or I was able to lock it
  UNLOCK RECORD (RECNO())
return llRetVal

procedure rierror
parameters tnErrNo,tcMessage,tcCode,tcProgram
local lnErrorRows,lnXX
lnErrorRows=alen(gaErrors,1)
if type('gaErrors[lnErrorRows,1]')<>"L"
  dimension gaErrors[lnErrorRows+1,alen(gaErrors,2)]
  lnErrorRows=lnErrorRows+1
endif
gaErrors[lnErrorRows,1]=tnErrNo
gaErrors[lnErrorRows,2]=tcMessage
gaErrors[lnErrorRows,3]=tcCode
gaErrors[lnErrorRows,4]=""
lnXX=1
do while !empty(program(lnXX))
  gaErrors[lnErrorRows,4]=gaErrors[lnErrorRows,4]+","+;
  program(lnXX)
  lnXX=lnXX+1
enddo
gaErrors[lnErrorRows,5]=pcParentDBF
gaErrors[lnErrorRows,6]=pnParentRec
gaErrors[lnErrorRows,7]=pcParentID
gaErrors[lnErrorRows,8]=pcParentExpr
gaErrors[lnErrorRows,9]=pcChildDBF
gaErrors[lnErrorRows,10]=pnChildRec
gaErrors[lnErrorRows,11]=pcChildID
gaErrors[lnErrorRows,12]=pcChildExpr
return tnErrNo


PROCEDURE riopen
PARAMETERS tcTable,tcOrder
local lcCurWkArea,lcNewWkArea,lnInUseSpot
lnInUseSpot=atc(tcTable+"*",pcRIcursors)
IF lnInUseSpot=0
  lcCurWkArea=select()
  SELECT 0
  lcNewWkArea=select()
  IF NOT EMPTY(tcOrder)
    USE (tcTable) AGAIN ORDER (tcOrder) ;
      ALIAS ("__ri"+LTRIM(STR(SELECT()))) share
  ELSE
    USE (tcTable) AGAIN ALIAS ("__ri"+LTRIM(STR(SELECT()))) share
  ENDIF
  if pnerror=0
    pcRIcursors=pcRIcursors+upper(tcTable)+"?"+STR(SELECT(),5)
  else
    lcNewWkArea=0
  endif something bad happened while attempting to open the file
ELSE
  lcNewWkArea=val(substr(pcRIcursors,lnInUseSpot+len(tcTable)+1,5))
  pcRIcursors = strtran(pcRIcursors,upper(tcTable)+"*"+str(lcNewWkArea,5),;
    upper(tcTable)+"?"+str(lcNewWkArea,5))
  IF NOT EMPTY(tcOrder)
    SET ORDER TO (tcOrder) IN (lcNewWkArea)
  ENDIF sent an order
  if pnerror<>0
    lcNewWkArea=0
  endif something bad happened while setting order
ENDIF
RETURN (lcNewWkArea)


PROCEDURE riend
PARAMETERS tlSuccess
local lnXX,lnSpot,lcWorkArea
IF tlSuccess
  END TRANSACTION
ELSE
  SET DELETED OFF
  ROLLBACK
  SET DELETED ON
ENDIF
IF EMPTY(pcRIolderror)
  ON ERROR
ELSE
  ON ERROR &pcRIolderror.
ENDIF
FOR lnXX=1 TO occurs("*",pcRIcursors)
  lnSpot=atc("*",pcRIcursors,lnXX)+1
  USE IN (VAL(substr(pcRIcursors,lnSpot,5)))
ENDFOR
IF pcOldCompat = "ON"
	SET COMPATIBLE ON
ENDIF
IF pcOldDele="OFF"
  SET DELETED OFF
ENDIF
IF pcOldExact="ON"
  SET EXACT ON
ENDIF
IF pcOldTalk="ON"
  SET TALK ON
ENDIF
do case
  case empty(pcOldDBC)
    set data to
  case pcOldDBC<>DBC()
    set data to (pcOldDBC)
endcase
RETURN .T.


PROCEDURE rireuse
* rireuse.prg
PARAMETERS tcTableName,tcWkArea
pcRIcursors = strtran(pcRIcursors,upper(tcTableName)+"?"+str(tcWkArea,5),;
  upper(tcTableName)+"*"+str(tcWkArea,5))
RETURN .t.

********************************************************************************
** "Referential integrity delete trigger for" category
PROCEDURE __RI_DELETE_category
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE CATEGORY_ID TO lcParentID,pcParentID
pcParentExpr="CATEGORY_ID"
lcChildWkArea=riopen("products","category_i")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=CATEGORY_ID
pcChildExpr="CATEGORY_ID"
IF !llRetVal
  DO rierror with -1,"Delete restrict rule violated.","",""
ENDIF
=rireuse("products",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" category
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_category
** "Referential integrity update trigger for" category
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("CATEGORY_ID")
pcParentID=lcOldParentID
pcParentExpr="CATEGORY_ID"
lcParentID=CATEGORY_ID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("products")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SELECT (lcChildWkArea)
  SCAN FOR CATEGORY_ID=lcOldParentID
    pnChildRec=recno()
    pcChildID=CATEGORY_ID
    pcChildExpr="CATEGORY_ID"
    IF NOT llRetVal
      EXIT
    ENDIF && not llretval
    llRetVal=riupdate("CATEGORY_ID",lcParentID,"CATEGORY")
  ENDSCAN get all of the products records
  =rireuse("products",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" category
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" customer
PROCEDURE __RI_DELETE_customer
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE CUSTOMER_ID TO lcParentID,pcParentID
pcParentExpr="CUSTOMER_ID"
lcChildWkArea=riopen("orders","customer_i")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=CUSTOMER_ID
pcChildExpr="CUSTOMER_ID"
IF !llRetVal
  DO rierror with -1,"Delete restrict rule violated.","",""
ENDIF
=rireuse("orders",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" customer
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_customer
** "Referential integrity update trigger for" customer
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("CUSTOMER_ID")
pcParentID=lcOldParentID
pcParentExpr="CUSTOMER_ID"
lcParentID=CUSTOMER_ID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("orders")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SELECT (lcChildWkArea)
  SCAN FOR CUSTOMER_ID=lcOldParentID
    pnChildRec=recno()
    pcChildID=CUSTOMER_ID
    pcChildExpr="CUSTOMER_ID"
    IF NOT llRetVal
      EXIT
    ENDIF && not llretval
    llRetVal=riupdate("CUSTOMER_ID",lcParentID,"CUSTOMER")
  ENDSCAN get all of the orders records
  =rireuse("orders",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" customer
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" employee
PROCEDURE __RI_DELETE_employee
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE EMPLOYEE_ID TO lcParentID,pcParentID
pcParentExpr="EMPLOYEE_ID"
lcChildWkArea=riopen("orders","employee_i")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=EMPLOYEE_ID
pcChildExpr="EMPLOYEE_ID"
IF !llRetVal
  DO rierror with -1,"Delete restrict rule violated.","",""
ENDIF
=rireuse("orders",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" employee
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_employee
** "Referential integrity update trigger for" employee
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcChildWkArea=select()
IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="USER_LEVEL")
  SELECT (lcChildWkArea)
  lcChildID=GROUP_ID
  lcOldChildID=oldval("GROUP_ID")
  pcChildDBF=dbf(lcChildWkArea)
  pnChildRec=recno(lcChildWkArea)
  pcChildID=lcOldChildID
  pcChildExpr="GROUP_ID"
  IF lcChildID<>lcOldChildID
    lcParentWkArea=riopen("user_level","group_id")
    IF lcParentWkArea<=0
      IF _triggerlevel=1
        DO riend WITH .F.
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN .F.
    ENDIF not able to open the child work area
    pcParentDBF=dbf(lcParentWkArea)
    llRetVal=SEEK(lcChildID,lcParentWkArea)
    pnParentRec=recno(lcParentWkArea)
    =rireuse("user_level",lcParentWkArea)
    IF NOT llRetVal
      DO rierror with -1,"Insert restrict rule violated.","",""
      IF _triggerlevel=1
        DO riend WITH llRetVal
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN llRetVal
    ENDIF no parent
  ENDIF this value was changed
ENDIF not part of a cascade from "user_level"
lcParentWkArea=lcChildWkArea
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("EMPLOYEE_ID")
pcParentID=lcOldParentID
pcParentExpr="EMPLOYEE_ID"
lcParentID=EMPLOYEE_ID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("orders")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SELECT (lcChildWkArea)
  SCAN FOR EMPLOYEE_ID=lcOldParentID
    pnChildRec=recno()
    pcChildID=EMPLOYEE_ID
    pcChildExpr="EMPLOYEE_ID"
    IF NOT llRetVal
      EXIT
    ENDIF && not llretval
    llRetVal=riupdate("EMPLOYEE_ID",lcParentID,"EMPLOYEE")
  ENDSCAN get all of the orders records
  =rireuse("orders",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" employee
********************************************************************************

********************************************************************************
** "Referential integrity insert trigger for" employee
PROCEDURE __RI_INSERT_employee
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcChildWkArea && child's work area
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcChildWkArea=SELECT()
SELECT (lcChildWkArea)
lcChildID=GROUP_ID
pcChildDBF=dbf(lcChildWkArea)
pnChildRec=recno(lcChildWkArea)
pcChildID=lcChildID
pcChildExpr="GROUP_ID"
lcParentWkArea=riopen("user_level","group_id")
IF lcParentWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN .F.
ENDIF not able to open the child work area
pcParentDBF=dbf(lcParentWkArea)
llRetVal=SEEK(lcChildID,lcParentWkArea)
pnParentRec=recno(lcParentWkArea)
=rireuse("user_level",lcParentWkArea)
IF NOT llRetVal
  DO rierror with -1,"Insert restrict rule violated.","",""
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity insert trigger for" employee
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_order_line_items
** "Referential integrity update trigger for" order_line_items
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcChildWkArea=select()
IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="PRODUCTS")
  SELECT (lcChildWkArea)
  lcChildID=PRODUCT_ID
  lcOldChildID=oldval("PRODUCT_ID")
  pcChildDBF=dbf(lcChildWkArea)
  pnChildRec=recno(lcChildWkArea)
  pcChildID=lcOldChildID
  pcChildExpr="PRODUCT_ID"
  IF lcChildID<>lcOldChildID
    lcParentWkArea=riopen("products","product_id")
    IF lcParentWkArea<=0
      IF _triggerlevel=1
        DO riend WITH .F.
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN .F.
    ENDIF not able to open the child work area
    pcParentDBF=dbf(lcParentWkArea)
    llRetVal=SEEK(lcChildID,lcParentWkArea)
    pnParentRec=recno(lcParentWkArea)
    =rireuse("products",lcParentWkArea)
    IF NOT llRetVal
      DO rierror with -1,"Insert restrict rule violated.","",""
      IF _triggerlevel=1
        DO riend WITH llRetVal
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN llRetVal
    ENDIF no parent
  ENDIF this value was changed
ENDIF not part of a cascade from "products"
IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="ORDERS")
  SELECT (lcChildWkArea)
  lcChildID=ORDER_ID
  lcOldChildID=oldval("ORDER_ID")
  pcChildDBF=dbf(lcChildWkArea)
  pnChildRec=recno(lcChildWkArea)
  pcChildID=lcOldChildID
  pcChildExpr="ORDER_ID"
  IF lcChildID<>lcOldChildID
    lcParentWkArea=riopen("orders","order_id")
    IF lcParentWkArea<=0
      IF _triggerlevel=1
        DO riend WITH .F.
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN .F.
    ENDIF not able to open the child work area
    pcParentDBF=dbf(lcParentWkArea)
    llRetVal=SEEK(lcChildID,lcParentWkArea)
    pnParentRec=recno(lcParentWkArea)
    =rireuse("orders",lcParentWkArea)
    IF NOT llRetVal
      DO rierror with -1,"Insert restrict rule violated.","",""
      IF _triggerlevel=1
        DO riend WITH llRetVal
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN llRetVal
    ENDIF no parent
  ENDIF this value was changed
ENDIF not part of a cascade from "orders"
lcParentWkArea=lcChildWkArea
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" order_line_items
********************************************************************************

********************************************************************************
** "Referential integrity insert trigger for" order_line_items
PROCEDURE __RI_INSERT_order_line_items
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcChildWkArea && child's work area
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcChildWkArea=SELECT()
SELECT (lcChildWkArea)
lcChildID=PRODUCT_ID
pcChildDBF=dbf(lcChildWkArea)
pnChildRec=recno(lcChildWkArea)
pcChildID=lcChildID
pcChildExpr="PRODUCT_ID"
lcParentWkArea=riopen("products","product_id")
IF lcParentWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN .F.
ENDIF not able to open the child work area
pcParentDBF=dbf(lcParentWkArea)
llRetVal=SEEK(lcChildID,lcParentWkArea)
pnParentRec=recno(lcParentWkArea)
=rireuse("products",lcParentWkArea)
IF NOT llRetVal
  DO rierror with -1,"Insert restrict rule violated.","",""
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
SELECT (lcChildWkArea)
lcChildID=ORDER_ID
pcChildDBF=dbf(lcChildWkArea)
pnChildRec=recno(lcChildWkArea)
pcChildID=lcChildID
pcChildExpr="ORDER_ID"
lcParentWkArea=riopen("orders","order_id")
IF lcParentWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN .F.
ENDIF not able to open the child work area
pcParentDBF=dbf(lcParentWkArea)
llRetVal=SEEK(lcChildID,lcParentWkArea)
pnParentRec=recno(lcParentWkArea)
=rireuse("orders",lcParentWkArea)
IF NOT llRetVal
  DO rierror with -1,"Insert restrict rule violated.","",""
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity insert trigger for" order_line_items
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" orders
PROCEDURE __RI_DELETE_orders
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE ORDER_ID TO lcParentID,pcParentID
pcParentExpr="ORDER_ID"
lcChildWkArea=riopen("order_line_items","order_id")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
SELECT (lcChildWkArea)
SEEK lcParentID
SCAN WHILE ORDER_ID=lcParentID AND llRetVal
  pnChildRec=recno()
  pcChildID=ORDER_ID
  pcChildExpr="ORDER_ID"
  llRetVal=ridelete()
ENDSCAN get all of the order_line_items records
=rireuse("order_line_items",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" orders
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_orders
** "Referential integrity update trigger for" orders
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcChildWkArea=select()
IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="CUSTOMER")
  SELECT (lcChildWkArea)
  lcChildID=CUSTOMER_ID
  lcOldChildID=oldval("CUSTOMER_ID")
  pcChildDBF=dbf(lcChildWkArea)
  pnChildRec=recno(lcChildWkArea)
  pcChildID=lcOldChildID
  pcChildExpr="CUSTOMER_ID"
  IF lcChildID<>lcOldChildID
    lcParentWkArea=riopen("customer","customer_i")
    IF lcParentWkArea<=0
      IF _triggerlevel=1
        DO riend WITH .F.
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN .F.
    ENDIF not able to open the child work area
    pcParentDBF=dbf(lcParentWkArea)
    llRetVal=SEEK(lcChildID,lcParentWkArea)
    pnParentRec=recno(lcParentWkArea)
    =rireuse("customer",lcParentWkArea)
    IF NOT llRetVal
      DO rierror with -1,"Insert restrict rule violated.","",""
      IF _triggerlevel=1
        DO riend WITH llRetVal
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN llRetVal
    ENDIF no parent
  ENDIF this value was changed
ENDIF not part of a cascade from "customer"
IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="SHIPPERS")
  SELECT (lcChildWkArea)
  lcChildID=SHIPPER_ID
  lcOldChildID=oldval("SHIPPER_ID")
  pcChildDBF=dbf(lcChildWkArea)
  pnChildRec=recno(lcChildWkArea)
  pcChildID=lcOldChildID
  pcChildExpr="SHIPPER_ID"
  IF lcChildID<>lcOldChildID
    lcParentWkArea=riopen("shippers","shipper_id")
    IF lcParentWkArea<=0
      IF _triggerlevel=1
        DO riend WITH .F.
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN .F.
    ENDIF not able to open the child work area
    pcParentDBF=dbf(lcParentWkArea)
    llRetVal=SEEK(lcChildID,lcParentWkArea)
    pnParentRec=recno(lcParentWkArea)
    =rireuse("shippers",lcParentWkArea)
    IF NOT llRetVal
      DO rierror with -1,"Insert restrict rule violated.","",""
      IF _triggerlevel=1
        DO riend WITH llRetVal
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN llRetVal
    ENDIF no parent
  ENDIF this value was changed
ENDIF not part of a cascade from "shippers"
IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="EMPLOYEE")
  SELECT (lcChildWkArea)
  lcChildID=EMPLOYEE_ID
  lcOldChildID=oldval("EMPLOYEE_ID")
  pcChildDBF=dbf(lcChildWkArea)
  pnChildRec=recno(lcChildWkArea)
  pcChildID=lcOldChildID
  pcChildExpr="EMPLOYEE_ID"
  IF lcChildID<>lcOldChildID
    lcParentWkArea=riopen("employee","employee_i")
    IF lcParentWkArea<=0
      IF _triggerlevel=1
        DO riend WITH .F.
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN .F.
    ENDIF not able to open the child work area
    pcParentDBF=dbf(lcParentWkArea)
    llRetVal=SEEK(lcChildID,lcParentWkArea)
    pnParentRec=recno(lcParentWkArea)
    =rireuse("employee",lcParentWkArea)
    IF NOT llRetVal
      DO rierror with -1,"Insert restrict rule violated.","",""
      IF _triggerlevel=1
        DO riend WITH llRetVal
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN llRetVal
    ENDIF no parent
  ENDIF this value was changed
ENDIF not part of a cascade from "employee"
lcParentWkArea=lcChildWkArea
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("ORDER_ID")
pcParentID=lcOldParentID
pcParentExpr="ORDER_ID"
lcParentID=ORDER_ID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("order_line_items")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SELECT (lcChildWkArea)
  SCAN FOR ORDER_ID=lcOldParentID
    pnChildRec=recno()
    pcChildID=ORDER_ID
    pcChildExpr="ORDER_ID"
    IF NOT llRetVal
      EXIT
    ENDIF && not llretval
    llRetVal=riupdate("ORDER_ID",lcParentID,"ORDERS")
  ENDSCAN get all of the order_line_items records
  =rireuse("order_line_items",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" orders
********************************************************************************

********************************************************************************
** "Referential integrity insert trigger for" orders
PROCEDURE __RI_INSERT_orders
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcChildWkArea && child's work area
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcChildWkArea=SELECT()
SELECT (lcChildWkArea)
lcChildID=CUSTOMER_ID
pcChildDBF=dbf(lcChildWkArea)
pnChildRec=recno(lcChildWkArea)
pcChildID=lcChildID
pcChildExpr="CUSTOMER_ID"
lcParentWkArea=riopen("customer","customer_i")
IF lcParentWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN .F.
ENDIF not able to open the child work area
pcParentDBF=dbf(lcParentWkArea)
llRetVal=SEEK(lcChildID,lcParentWkArea)
pnParentRec=recno(lcParentWkArea)
=rireuse("customer",lcParentWkArea)
IF NOT llRetVal
  DO rierror with -1,"Insert restrict rule violated.","",""
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
SELECT (lcChildWkArea)
lcChildID=SHIPPER_ID
pcChildDBF=dbf(lcChildWkArea)
pnChildRec=recno(lcChildWkArea)
pcChildID=lcChildID
pcChildExpr="SHIPPER_ID"
lcParentWkArea=riopen("shippers","shipper_id")
IF lcParentWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN .F.
ENDIF not able to open the child work area
pcParentDBF=dbf(lcParentWkArea)
llRetVal=SEEK(lcChildID,lcParentWkArea)
pnParentRec=recno(lcParentWkArea)
=rireuse("shippers",lcParentWkArea)
IF NOT llRetVal
  DO rierror with -1,"Insert restrict rule violated.","",""
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
SELECT (lcChildWkArea)
lcChildID=EMPLOYEE_ID
pcChildDBF=dbf(lcChildWkArea)
pnChildRec=recno(lcChildWkArea)
pcChildID=lcChildID
pcChildExpr="EMPLOYEE_ID"
lcParentWkArea=riopen("employee","employee_i")
IF lcParentWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN .F.
ENDIF not able to open the child work area
pcParentDBF=dbf(lcParentWkArea)
llRetVal=SEEK(lcChildID,lcParentWkArea)
pnParentRec=recno(lcParentWkArea)
=rireuse("employee",lcParentWkArea)
IF NOT llRetVal
  DO rierror with -1,"Insert restrict rule violated.","",""
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity insert trigger for" orders
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" products
PROCEDURE __RI_DELETE_products
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE PRODUCT_ID TO lcParentID,pcParentID
pcParentExpr="PRODUCT_ID"
lcChildWkArea=riopen("order_line_items","product_id")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=PRODUCT_ID
pcChildExpr="PRODUCT_ID"
IF !llRetVal
  DO rierror with -1,"Delete restrict rule violated.","",""
ENDIF
=rireuse("order_line_items",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" products
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_products
** "Referential integrity update trigger for" products
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcChildWkArea=select()
IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="CATEGORY")
  SELECT (lcChildWkArea)
  lcChildID=CATEGORY_ID
  lcOldChildID=oldval("CATEGORY_ID")
  pcChildDBF=dbf(lcChildWkArea)
  pnChildRec=recno(lcChildWkArea)
  pcChildID=lcOldChildID
  pcChildExpr="CATEGORY_ID"
  IF lcChildID<>lcOldChildID
    lcParentWkArea=riopen("category","category_i")
    IF lcParentWkArea<=0
      IF _triggerlevel=1
        DO riend WITH .F.
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN .F.
    ENDIF not able to open the child work area
    pcParentDBF=dbf(lcParentWkArea)
    llRetVal=SEEK(lcChildID,lcParentWkArea)
    pnParentRec=recno(lcParentWkArea)
    =rireuse("category",lcParentWkArea)
    IF NOT llRetVal
      DO rierror with -1,"Insert restrict rule violated.","",""
      IF _triggerlevel=1
        DO riend WITH llRetVal
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN llRetVal
    ENDIF no parent
  ENDIF this value was changed
ENDIF not part of a cascade from "category"
IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="SUPPLIER")
  SELECT (lcChildWkArea)
  lcChildID=SUPPLIER_ID
  lcOldChildID=oldval("SUPPLIER_ID")
  pcChildDBF=dbf(lcChildWkArea)
  pnChildRec=recno(lcChildWkArea)
  pcChildID=lcOldChildID
  pcChildExpr="SUPPLIER_ID"
  IF lcChildID<>lcOldChildID
    lcParentWkArea=riopen("supplier","supplier_i")
    IF lcParentWkArea<=0
      IF _triggerlevel=1
        DO riend WITH .F.
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN .F.
    ENDIF not able to open the child work area
    pcParentDBF=dbf(lcParentWkArea)
    llRetVal=SEEK(lcChildID,lcParentWkArea)
    pnParentRec=recno(lcParentWkArea)
    =rireuse("supplier",lcParentWkArea)
    IF NOT llRetVal
      DO rierror with -1,"Insert restrict rule violated.","",""
      IF _triggerlevel=1
        DO riend WITH llRetVal
      ENDIF at the end of the highest trigger level
      SELECT (lcStartArea)
      RETURN llRetVal
    ENDIF no parent
  ENDIF this value was changed
ENDIF not part of a cascade from "supplier"
lcParentWkArea=lcChildWkArea
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("PRODUCT_ID")
pcParentID=lcOldParentID
pcParentExpr="PRODUCT_ID"
lcParentID=PRODUCT_ID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("order_line_items")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SELECT (lcChildWkArea)
  SCAN FOR PRODUCT_ID=lcOldParentID
    pnChildRec=recno()
    pcChildID=PRODUCT_ID
    pcChildExpr="PRODUCT_ID"
    IF NOT llRetVal
      EXIT
    ENDIF && not llretval
    llRetVal=riupdate("PRODUCT_ID",lcParentID,"PRODUCTS")
  ENDSCAN get all of the order_line_items records
  =rireuse("order_line_items",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" products
********************************************************************************

********************************************************************************
** "Referential integrity insert trigger for" products
PROCEDURE __RI_INSERT_products
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcChildWkArea && child's work area
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcChildWkArea=SELECT()
SELECT (lcChildWkArea)
lcChildID=CATEGORY_ID
pcChildDBF=dbf(lcChildWkArea)
pnChildRec=recno(lcChildWkArea)
pcChildID=lcChildID
pcChildExpr="CATEGORY_ID"
lcParentWkArea=riopen("category","category_i")
IF lcParentWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN .F.
ENDIF not able to open the child work area
pcParentDBF=dbf(lcParentWkArea)
llRetVal=SEEK(lcChildID,lcParentWkArea)
pnParentRec=recno(lcParentWkArea)
=rireuse("category",lcParentWkArea)
IF NOT llRetVal
  DO rierror with -1,"Insert restrict rule violated.","",""
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
SELECT (lcChildWkArea)
lcChildID=SUPPLIER_ID
pcChildDBF=dbf(lcChildWkArea)
pnChildRec=recno(lcChildWkArea)
pcChildID=lcChildID
pcChildExpr="SUPPLIER_ID"
lcParentWkArea=riopen("supplier","supplier_i")
IF lcParentWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN .F.
ENDIF not able to open the child work area
pcParentDBF=dbf(lcParentWkArea)
llRetVal=SEEK(lcChildID,lcParentWkArea)
pnParentRec=recno(lcParentWkArea)
=rireuse("supplier",lcParentWkArea)
IF NOT llRetVal
  DO rierror with -1,"Insert restrict rule violated.","",""
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity insert trigger for" products
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" shippers
PROCEDURE __RI_DELETE_shippers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE SHIPPER_ID TO lcParentID,pcParentID
pcParentExpr="SHIPPER_ID"
lcChildWkArea=riopen("orders","shipper_id")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=SHIPPER_ID
pcChildExpr="SHIPPER_ID"
IF !llRetVal
  DO rierror with -1,"Delete restrict rule violated.","",""
ENDIF
=rireuse("orders",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" shippers
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_shippers
** "Referential integrity update trigger for" shippers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("SHIPPER_ID")
pcParentID=lcOldParentID
pcParentExpr="SHIPPER_ID"
lcParentID=SHIPPER_ID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("orders")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SELECT (lcChildWkArea)
  SCAN FOR SHIPPER_ID=lcOldParentID
    pnChildRec=recno()
    pcChildID=SHIPPER_ID
    pcChildExpr="SHIPPER_ID"
    IF NOT llRetVal
      EXIT
    ENDIF && not llretval
    llRetVal=riupdate("SHIPPER_ID",lcParentID,"SHIPPERS")
  ENDSCAN get all of the orders records
  =rireuse("orders",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" shippers
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" supplier
PROCEDURE __RI_DELETE_supplier
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE SUPPLIER_ID TO lcParentID,pcParentID
pcParentExpr="SUPPLIER_ID"
lcChildWkArea=riopen("products","supplier_i")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=SUPPLIER_ID
pcChildExpr="SUPPLIER_ID"
IF !llRetVal
  DO rierror with -1,"Delete restrict rule violated.","",""
ENDIF
=rireuse("products",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" supplier
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_supplier
** "Referential integrity update trigger for" supplier
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("SUPPLIER_ID")
pcParentID=lcOldParentID
pcParentExpr="SUPPLIER_ID"
lcParentID=SUPPLIER_ID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("products")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SELECT (lcChildWkArea)
  SCAN FOR SUPPLIER_ID=lcOldParentID
    pnChildRec=recno()
    pcChildID=SUPPLIER_ID
    pcChildExpr="SUPPLIER_ID"
    IF NOT llRetVal
      EXIT
    ENDIF && not llretval
    llRetVal=riupdate("SUPPLIER_ID",lcParentID,"SUPPLIER")
  ENDSCAN get all of the products records
  =rireuse("products",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" supplier
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" user_level
PROCEDURE __RI_DELETE_user_level
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE GROUP_ID TO lcParentID,pcParentID
pcParentExpr="GROUP_ID"
lcChildWkArea=riopen("employee","group_id")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=GROUP_ID
pcChildExpr="GROUP_ID"
IF !llRetVal
  DO rierror with -1,"Delete restrict rule violated.","",""
ENDIF
=rireuse("employee",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" user_level
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_user_level
** "Referential integrity update trigger for" user_level
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("TASTRADE")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("GROUP_ID")
pcParentID=lcOldParentID
pcParentExpr="GROUP_ID"
lcParentID=GROUP_ID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("employee")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SELECT (lcChildWkArea)
  SCAN FOR GROUP_ID=lcOldParentID
    pnChildRec=recno()
    pcChildID=GROUP_ID
    pcChildExpr="GROUP_ID"
    IF NOT llRetVal
      EXIT
    ENDIF && not llretval
    llRetVal=riupdate("GROUP_ID",lcParentID,"USER_LEVEL")
  ENDSCAN get all of the employee records
  =rireuse("employee",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" user_level
********************************************************************************
**__RI_FOOTER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_FOOTER**
�.0$(,PQR/�%d'����1*SELECT Orders.customer_id, SUM(Orditems.unit_price*Orditems.quantity-(0.01*Orders.discount*Orditems.unit_price*Orditems.quantity)+Orders.freight) AS ordertotal FROM  tastrade!orders  INNER JOIN tastrade!order_line_items Orditems  ON  Orders.order_id = Orditems.order_id GROUP BY Orders.customer_id)+tastrade!orders