Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
a_case_study_for_a_smart_parts_product [2019/01/29 10:49] kcifreo |
a_case_study_for_a_smart_parts_product [2019/01/30 09:21] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== |
**Description** | **Description** | ||
- | This is intended as a case study description of the thought and steps to creating a live product which hopefully can help others do the same in less time or conceive and implement more clever applications of this extraordinarily powerful tool.We needed a product for design and layout services which acted like a menu from which estimators could select specific design " | + | |
+ | |||
+ | This is intended as a case study description of the thought and steps to creating a live product which hopefully can help others do the same in less time or conceive and implement more clever applications of this extraordinarily powerful tool. | ||
+ | |||
+ | |||
+ | |||
+ | We needed a product for design and layout services which acted like a menu from which estimators could select specific design " | ||
+ | |||
+ | |||
+ | |||
+ | SmartParts seemed to be the best method. | ||
+ | |||
===== Concept ===== | ===== Concept ===== | ||
+ | |||
+ | |||
Basic Discussion of Approach | Basic Discussion of Approach | ||
- | Since Smart Parts is built from Parts, we needed to create a list of parts which encompassed the " | + | |
+ | |||
+ | Since Smart Parts is built from Parts, we needed to create a list of parts which encompassed the " | ||
+ | |||
The SmartPart Search Variable presents a top-level and sub-level category well; so to present the lists in manageable chunks, we settled on two categories for the parts - the overall category which would return all the needed parts which we called " | The SmartPart Search Variable presents a top-level and sub-level category well; so to present the lists in manageable chunks, we settled on two categories for the parts - the overall category which would return all the needed parts which we called " | ||
+ | |||
+ | |||
The final pricing form is shown below with 3 " | The final pricing form is shown below with 3 " | ||
- | {{: | + | |
+ | |||
+ | {{:: | ||
+ | |||
===== Cautions ===== | ===== Cautions ===== | ||
+ | |||
+ | |||
Plan out the Part Names and the categories before starting the creation of Parts and the implementation will be smoother but don't let that slwo you down as you can change these later. | Plan out the Part Names and the categories before starting the creation of Parts and the implementation will be smoother but don't let that slwo you down as you can change these later. | ||
- | ===== Steps ===== | ||
+ | |||
+ | ===== Steps ===== | ||
- Step 1 | - Step 1 | ||
+ | |||
+ | |||
< | < | ||
+ | - Step 2 | ||
- | 2. Step 2 | ||
- | Created sub-categories under the Design Category to contain the actual parts{{: | ||
- | 3. Created user constants for the hour rates and markups for the parts | + | |
+ | - Created user constants for the hour rates and markups for the parts | ||
+ | - Created variables for the hour rates and markups for the parts which house the user constant. This is an added step which then permits us to put the variables in popups and pricing forms to modify the values for a specific order. | ||
+ | - Created the parts to be found in the SmartParts Seach variable. Since the input quantity could be quantity of hours, sign types, signs, inserts, etc., we needed to be able to show the needed units on the pricing form in the Search Variable. | ||
- | 4. Created variables for the hour rates and markups for the parts which house the user constant. This is an added step which then permits us to put the variables in popups and pricing forms to modify the values for a specific order. | ||
- | 5. Created the parts to be found in the SmartParts Seach variable. Since the input quantity could be quantity of hours, sign types, signs, inserts, etc., we needed to be able to show the needed units on the pricing form in the Search Variable. | ||
< | < | ||
- | For the same reason we needed to set up those parts where the quantity entered is different from the hours required with different display and inventory units.{{: | ||
- | 6. Created the pricing form following the directions posted on this WIKI for the creation of the SmartParts variables: ([[: | ||
- | < | + | For the same reason we needed to set up those parts where the quantity entered is different from the hours required with different display and inventory units.{{:: |
+ | - Created the pricing form following the directions posted on this WIKI for the creation of the SmartParts variables: ([[how-to_setup_a_smart_part_product|http: | ||
- | {{: | ||
- | < | ||
- | < | + | < |
- | {{: | ||
- | < | ||
- | < | + | {{:: |
- | {{: | ||
- | < | ||
- | 7. Added cosmetic adjustments to fit the presentation to our application and users. For example, we used a Pricing Form RZ Panel and text object to cover the top banner of the SmartParts variables with a description of what that variable is showing. We also added a place for adding comments or text explanations. See the blue bar on top of the SmarParts variables above. | + | < |
- | 8. Realizing that the Estimator needed considerable latitude to adjust the price resulting from this product and form, we created a popup to permit discounting,, | ||
- | {{: | ||
- | 9. Created the Product which we named " | + | < |
+ | |||
+ | |||
+ | |||
+ | | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | |||
+ | |||
+ | | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | - Added cosmetic adjustments to fit the presentation to our application and users. For example, we used a Pricing Form RZ Panel and text object to cover the top banner of the SmartParts variables with a description of what that variable is showing. We also added a place for adding comments or text explanations. See the blue bar on top of the SmarParts variables above. | ||
+ | - Realizing that the Estimator needed considerable latitude to adjust the price resulting from this product and form, we created a popup to permit discounting,, | ||
+ | |||
+ | |||
+ | |||
+ | | ||
+ | - Created the Product which we named " | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | |||
+ | |||
+ | Brought in all the variables we had created for the product.{{:: | ||
+ | |||
< | < | ||
- | {{: | ||
- | 10. Created layout sheets for presenting the resulting selections in an estimate or invoice and work order. For the work order, we wanted the designers to be able to see both the quantity of the units ordered and the hours assumed for them. | ||
- | {{: | + | {{:: |
+ | - Created layout sheets for presenting the resulting selections in an estimate or invoice and work order. For the work order, we wanted the designers to be able to see both the quantity of the units ordered and the hours assumed for them. | ||
+ | |||
+ | |||
+ | |||
+ | {{:: | ||
+ | |||
< | < | ||
+ | |||
+ | |||
< | < | ||
- | < | + | |
- | Parts[index].SKU; | + | |
- | Parts.[counter].Part.PartCategoryName | + | < |
+ | Parts[index].SKU; | ||
+ | Parts.[counter].Part.PartCategoryName | ||
</ | </ | ||
+ | |||
+ | |||
The other is a function | The other is a function | ||
- | < | + | |
+ | |||
+ | < | ||
GetPartProperty(Parts[counter].PartCode," | GetPartProperty(Parts[counter].PartCode," | ||
</ | </ | ||
+ | |||
+ | |||
Almost all of the part information is available in CFL from one of these property statements; however when the Display unit is different from the Inventory Unit, we had to derive the quantity ordered from the formula (note that since these numbers are being retrieved for a layout, they are converted to a string value): | Almost all of the part information is available in CFL from one of these property statements; however when the Display unit is different from the Inventory Unit, we had to derive the quantity ordered from the formula (note that since these numbers are being retrieved for a layout, they are converted to a string value): | ||
- | < | + | |
+ | |||
+ | < | ||
IF GetPartProperty(Parts[counter].PartCode," | IF GetPartProperty(Parts[counter].PartCode," | ||
TOSTRING(Parts[counter].EstimatedQuantity/ | TOSTRING(Parts[counter].EstimatedQuantity/ | ||
Line 100: | Line 174: | ||
ENDIF | ENDIF | ||
</ | </ | ||
+ | |||
+ | |||
===== CFL Code For Smart Parts Detail Layout ===== | ===== CFL Code For Smart Parts Detail Layout ===== | ||
- | With modifications the code below should be usable for most any SmartParts product. The " " is the code for a hard space. | + | |
+ | |||
+ | With modifications the code below should be usable for most any SmartParts product. The " " is the code for a hard space. | ||
+ | |||
< | < | ||
Line 113: | Line 193: | ||
+ TABCHAR + TABCHAR + | + TABCHAR + TABCHAR + | ||
HTMLFONT( | HTMLFONT( | ||
- | " " | + | " " |
IF GetPartProperty(Parts[counter].PartCode," | IF GetPartProperty(Parts[counter].PartCode," | ||
TOSTRING(Parts[counter].EstimatedQuantity/ | TOSTRING(Parts[counter].EstimatedQuantity/ | ||
ELSE 0 | ELSE 0 | ||
ENDIF | ENDIF | ||
- | +" " | + | +" " |
+" | +" | ||
+ TOSTRING(Parts[counter].estimatedquantity) +" Hr(s) " | + TOSTRING(Parts[counter].estimatedquantity) +" Hr(s) " | ||
+ HTMLRETURN | + HTMLRETURN | ||
- | +" " | + | +" " |
| | ||
+" | +" | ||
+ TOSTRING(Parts[counter].EstimatedCost."###,## | + TOSTRING(Parts[counter].EstimatedCost."###,## | ||
- | +" " | + | +" " |
| | ||
| | ||
Line 148: | Line 228: | ||
**Source** | **Source** | ||
+ | |||
+ | |||
Contributor: | Contributor: | ||
+ | |||
+ | |||
Date: _10/7/2017 | Date: _10/7/2017 | ||
+ | |||
+ | |||
Version: Control 6.1 | Version: Control 6.1 | ||
+ | |||
+ | |||