[ https://issues.apache.org/jira/browse/OFBIZ-2820?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12741062#action_12741062 ]
Mark Whitis commented on OFBIZ-2820: ------------------------------------ The window example also illustrates some other things: - Internal kitting. Not all kits are delivered to the customer. Some kits are delivered internally to the shop so the finished parts can be delivered to the customer. - Internal resources. In addition to resources specific to the product as illustrated in the PC configuration example, there are other resources internal to the company, such as shop time on various machines. - Process scheduling. This is outside the web store module. But in estimating delivery times, processes and time to deliver parts not in stock get factored in. The window requires use of two types of miter saws (one for metal, one for wood), a glass cutting station, and an assembly station. Any one of which may be oversubscribed while the others sit idle. Parts can't be cut until they are in stock. They may not be ordered immediately, but batched (i.e. orders to company X go out on friday). They can't be painted until they are cut. They can't be assembled until they are painted. Some module basically computes a Gant chart, taking into consideration other orders in the queue. The e-commerce module needs to supply the information to the other module and get the result. - checking stock upstream for parts not in stock. - Hidden relationships between parts. The user doesn't see the kits of parts contained, in this case, but may in others. - non-orderable parts (OFBiz appears to already have that). - Transmission of details not visable to end-user to other internal processes. While some of the details are particular to making a window (and a particular style, at that), this is not specific to windows. Making a printed circuit board (adding options to a base board), for example, uses the same software infrastructure. In addition, the base board may be assembled from a kit of parts as well, though usually in batches. Sometimes the parts are both orderable items and used internally. Internal use may take priority, as you can't make a batch of 100 boards with 90 parts, so parts need to be reservable. OFBiz has a manufacturing module, so some of the internal parts kitting, scheduling, etc. may be covered. But it is worth noting that kitting is something that applies to both internal orders and external ones. And cost and dimension data may be rather tightly coupled between sales/ordering and manufacturing - you should only have to code it once and it gets used by different modules (and may be cached between them, in some cases). > Pricing for variable size objects > --------------------------------- > > Key: OFBIZ-2820 > URL: https://issues.apache.org/jira/browse/OFBIZ-2820 > Project: OFBiz > Issue Type: New Feature > Components: product > Affects Versions: SVN trunk > Environment: all > Reporter: Mark Whitis > > OFBiz seems to lack support for variable size objects. > Examples: > - 5.36 hours of time at $100 for first hour and $75 per additional hour > billed in increments of 15 minutes. > - 1.7 yards of cloth at $6.37 per yard > - 1.5lb of bulk whole wheat flour at $1.58/pound > - 4 pieces 6 inches long of alloy 6061-T6511 aluminum 1" square bar stock: > - Maximum length per piece: 108 inches > - Pull charge: $0.50 > - Cutting charge: 4 cuts at $0.15/cut - may be global or item > specific or calculated based on cross section and material > - Cross section: 1 cubic inch per inch (line item specific) > - Density: 0.098 pounds per cubic inch (shared for all 6061-T6511 > products) > - Shape modifier: 1.00 for square shape (line item or category > specific) - some shapes may be more expensive per unit weight. > - Shipping weight: > piece_length*number_of_pieces*cross_section*density > - cost per pound: shared with other 6061-T6511 product > - Cost: > pull_charge+cut_charge*number_of_pieces+cross_section*density*shape_modifier*price_per_pound*(piece_length+kerf)*number_of_pieces > The cost of aluminum may change frequently. Price calculation > might be based on the current spot price of aluminum, inventory replacement > cost (same as preceeding), or the cost when these particular bars were > acquired, or some function that takes both into account. > Remainder charges: Since pieces are cut from fixed length bars, > Prices may figure in a surcharge based on the remaining portion that will be > more or less unsaleable and has to be sold as surplus, melted down, etc. Or > alternatively, this can be included in the charge > and a discount offered for full bar lengths supplied as full bar or > cut up. So, you pay a reduced price per inch (or a fixed cost) if you buy > a full bar or if you order a full bar cut to length, etc. > - Full bar price modifier: 0.80. > example: 13 pieces 16" long (+1/8" saw kerf) gets 7 pieces from > the first bar, charged as 1 bar + 7 cuts, and 6 pieces from the second bar > charged by the inch. However, since the full bar price is lower, in this > case, this can be charged as 2 bars + 13 cuts. > Example sites: www.asapsource.com, www.onlinemetals.com, > www.industrialmetals.com. Various levels of dysfunction. ASAP's web > store can handle per inch pricing but can't factor in the cutting prices > properly so they charge greatly inflated (almost 4x what the price should be) > cost per inch. industrialmetals web store can't handle per inch pricing so > they clutter up the website with 12", 24", 36", 48", 60", and 72" standard > lengths of the same item, you have to contact them if you want a different > length, and a substantial portion of their inventory isn't in the webstore > due to the burden of creating six or more products per item (not to mention > having to change hundreds of items * 6 copies when the cost of materials > changs). > - t-slot structural aluminum > This is very similar to the bar stock given above. However, there > is a twist. There are optional standard machining services. > - 4 pieces 32" long of 10EX1020 extrusion > - 1 clearance hole {0.125"} diameter measured {0.5"} from end > {A} along grove {A}. > - 1 clearance hole 0.125" diameter measured 0.5" from end A > along grove B > -1 clearance hole 0.125" diameter measured 0.5" from end B > along grove A > - 1 clearance hole 0.125" diameter measured 0.5" from end B > along grove B > - 1 customer part number marking: "XYZ001" > - 2 pieces 32" long of 10EX1020 extrusion > - 1 {clearance hole} {0.125"} diameter measured {0.5"} from > end {A} along grove {A}. > - 1 clearance hole 0.125" diameter measured 0.5" from end A > along grove B > - 1 clearance hole 0.125" diameter measured 1.5" from end A > along grove A > - 1 clearance hole 0.125" diamter measured 1.5" from end A > along grove B > - (four more holes - repeat above for end B). > - 1 customer part number marking: "XYZ002" > > In this case, clearance hole is a partnumber and there is another > partnumber for counterbore and another for an angled counterbore/hole, etc. > The catch is that this lineitem needs to capture 4 parameters and be a > sub-item under the first item. The association with the parent item must be > maintained. Further, the cost is multiplied by the piece count, so this > is 32 hole charges > total and 6 part number markings. Also note that the separate line items > may not be combined. Even though we have two line items > with the same base part number, the length and or modifications may differ. > Sample websites: www.8020.net, www.faztek.net. > You have to look at the PDF catalogs for details of machining services. > 8020 doesn't have a webstore (they sell through distributors) and many of > their distributors don't either. Faztek's web store includes only standard > 97" lengths, no cut to length and no drilling (even though they provide these > services). > Note that this is best served by named expressions (or even functions, such > as ECMAscript) which can be included by reference in each part number or > category, making use of a combination of variables specific to the specific > part number, a category, and global variables and which may be further > modified by additional expressions. > - Kitting > Line items may be grouped into "kits". This applies to the metal > parts above and to electronic components and various other > situations. When combined with line item specific modifications, > your order list is now a three layer outline: > - Kit 1, Marking "KIT001" > - line item > - line item > - line item ... > - Kit 2, Marking "KIT002" > -line item > - modification > - modification > -line item > Identical line items need to be kept separate between different kits, > for packaging reasons. For pricing, the price may be computed > separately (cost for counting/packaging separately) or combined > (quantity discount) or somewhere in between. > Other applications require kitting as well. For example: "Bob's > office suppies" and "Jane's office supplies" may be combined in one > order (saves shipping, quantity discounts, etc) but be packed > seperately. Note that you may order more than one of each kit - thus the > quantities for each line item are multiplied by the kit quantity (if you > order 10 of a kit, you may also choose from 10 separate subpackages or 1 > separate subpackage containing 10x the quantity). You may also reorder > these kits in the future, so it is helpful to store these in the customer > profile. Many companies in many industries offer kitting. I have yet to > see one that can do so via the web store. > - Shipping limits > Metal is typically supplied from the extruder/mill/foundry/etc to > distributor's in 10' or 20' lengths. However, UPS imposes limits > of 9' length, 165" length (not too much danger, there) + girth, and > 150lbs per package (which can easily be exceeded by a short length of steel > with a large crossection). > - Plastics: almost identical to metal as far as e-commerce requirements. > - Complicated Example > One of the more complicated online stores is www.digikey.com and it is > instructive for anyone developing a web store application. Digikey is the > amazon of its industry. They STOCK 450,000 products and list many more in > their catalog, they ship over 2 million orders each year from a 14 acre > automated facility. Their success is largely due to their power of their > online catalog. Search for "74HC00", then select "Fairchild", "Surface > mount", "4-quad", "14-soic","in-stock", "lead free", "rohs", then hit "apply > filters". > - When you entered 74HC00, it did a partial part number search. The > algorithm is complicated but similar throught the industry. > 74HC00 matched "MM74HC00M" and "MM74HC00MX". Seems simple enough. > A search term of "7400" also would have matched those > parts but a search term of "74HC00" would not have matched the part > number "SN7400N". It also searched in multiple fields > incuding manufacturer's part number, digikey part number, > description, etc. The funny matching algorithm only applies to > the first two part number fields. > - Notice that it had a lot of parameters for each part, and you can > select from them. The parameters vary by category - there may > be some overlap. > - Also notice that the parameters are displayed in parts listings - not > just item number, description, and price. One of those parameters > is actually a link to the datasheet (it is a little more complicated > than that as there may be more than one datasheet or drawing > per part. > - They also have links to catalog pages on the item detail pages, where > appropriate. > - Notice that the same product is available in 4 different packaging. > They get it from the manufacturer in both tubes and reels of 2500. They > will provide you with a whole reel or cut a specified number of parts of a > reel and provide those as cut tape or they will cut a specified number of > parts off a reel and splice those onto a new reel for $7 + cost of parts. > They will provide you with a whole tube or > transfer a specific number of parts to a new tube. Note that they have > pricing that varies by quantity ordered. Their pricing reflects quantity > discounts/price breaks (common for the industry), minimum orders per line > item (for a $0.05 part, the minimum quantity is 10 - it would cost that much > to pull one part as well as large minimums for many (but not all) non-stock > items), order multiples (multiples of 2500 for full reel pricing), etc. > Underneath, these prices are partly based on the cost of pulling and > repackaging each part as well as the notion of cost. > - Three of the digikey part numbers pull stock from the same inventory. > - You can't see it unless you create an account, but you can also add > parts to your shopping cart by uploading a CSV file. I think > they also do EDI. They lack the ability to order a list of parts by > clicking on a web link (i.e. to build this, you need these quantities > of these 25 different items. Click here to order from digikey. They > also lack an open XML-RPC/SOAP/etc. alternative to closed (and ugly) standard > EDI. > - Customer reference number can be added to each line item > - Although you can't see it in this example, some of the parts are value > added parts. They take multiple part numbers and > combine (assemble) them into one. This means they draw on the > inventories of those parts. The digireel, in this example, though, is a > primitive > example of this ($7 reel + parts). > - The program appears to let you define options for each item and even a > price per option. Configurable PC, for example. > But it doesn't let you choose more than one of the same option. Hard > drives are implemented, for example, by having configuration > items for 1st hard drive and 2nd hard drive. 3rd hard drive isn't an > option. "Choose up to 4 items from the following list", with > a quantity for each. With a sub option (in the case of hard drives) > for which port to connect to. > - For more complicated situations, extending the previous one, you need > the notion of consumable resources. > 1 Bare bones PC, contains part #xxx motherboard, contains part #xxx > case, ... > Qty __ 500GB SATA internal hard drive (default), $100, consumes 1 SATA > port, consumes one 3-1/2" internal bay or 3-1/2" external bay, consumes > 5...@1a, 1...@2.5a, consumes 1 SATA power connector > Qty __ 1000GB SATA internal hard drive, $150, consumes 1 SATA port, > consumes one 3-1/2" internal bay or 3-1/2 external bay > consumes 5...@1a, 1...@2.5a, consumes 1 SATA power connector > [ ] Replace default hard drive with another purchased hard drive > ordered on same order -$100. > Qty ___ SATA DVD+RW burner, $150, consumes 1 SATA port, consumes one > 5-1/4" external bay, consumes 5...@1a, 1...@1a, 1 SATA power connector > Qty ___ SATA CD-ROM drive, $50, consumes 1 SATA port, consumes one > 5-1/4" external bay, consumes power.... > Qty ___ 500GB IDE internal hard drive, $100, consumes 1 IDE port, > consumes one 3-1/2" internal bay or 3-1/2" external bay, consumes power.... > Qty ___ PCI->SATA RAID controller, Consumes 1 PCI slot, provides 4 IDE > Ports named xx.RAID1, xx.RAID2, xx.RAID3, and xx.RAID4, consumes power... > Qty ___ SATA->SATA RAID controller, Consumes 1 RAID port, provides 4 > RAID PORTS named yy.RAID1, yy.RAID2, yy.RAID3, yy.RAID4, consumes power... > Qty ___ Display controller, Consumes 1 PCI-Express x16 port (ok, SLI > complicates things by letting you have one 16x port and one unusable port or > two 8x ports). Provides 1 DVI port OR 1 VGA port (but not both > simultaneusly), incompatible with #WINVista Windows Vista. > Qty ___ SATA->ESATA adapter. Consumes 1 SATA, consumes 1 slot opening, > provides 1 ESATA port. > Qty ___ IDE->SATA adapter. Consumes 1 IDE port, provides 1 SATA port > (there are gender issues) > Qty ___ SATA->IDE adapter. Consumes 1 SATA port, provides 1 IDE port.. > Qty ___ 350W power supply (default) Consumes 1 power supply bay. > Provides 5...@15a, 1...@10a, Provides 1 motherboard power connector, Provides > 2 floppy power connectors, provides 2 SATA power connectors, Provides 2 IDE > power connectors. > Qty ___ 500W power supply. Consumes 1 power supply bay. Provides > 5...@20a, 1...@15a > Qty ___ IDE->SATA power adapter. Consumes 1 IDE power connector, > Provides 1 SATA power connector > Qty ___ SATA->IDE power adapter. Consumes 1 SATA power connector, > Provides 1 SATA power connector > Qty___ SATA Power Y connector. Consumes 1 SATA power connector, > Provides 2 SATA power connector > Qty ___ Ubuntu Linux 9.04 AMD64 > Qty ___ Ubuntu Linux 9.04 I386 > Qty ___ Windows XP > Qty ___ Windows Vista > [ ] software install > [ ] hardware install > Qty ___ Opteron CPU fan > The catalog will ask where you want each attached, choosing the first > unused port in each category by default. "You decide" might > be a useful choice as well for user's who don't understand internals. > Resources may be divided into subpools. Some resources may be > converted into other resources. Some PCI-Express ports are usable as > narrower ports and some aren't. Each PCI or PCI-Express port provides > either the appropiate port or 1 slot opening in the case, but not both. In > some cases, resource constraints may not be satisfied but user should be able > to order anyway; user may have some parts already or know better. But the > user should be warned. Resources may be provided (or consumed) from another > part number included by reference in the list of options. The options above > can be broken down into categories. Note that resources aren't > necessarily integer quantities: Power consumption is an example. > User should be able to add a part number not on the list of options to the > parent part number. I.E. If a 1.5TB hard drive wasn't listed as one of the > options, user can still > order it as part of the system in addition to or in place of the options > above. Some constaints may be imposed on package pricing, in that case. > Or the package may be based on actual prices of included part numbers minus a > discount if order 1 CASE, 1 Motherboard>=$150, 1CPU, 1Hard Drive>=$100, total > value of preceeding >=$400, total value of system >=$500. > I am not running a web store which needs these features. But, I do order > from suppliers who do and am inconvenienced by their dysfunctional stores. > While these features may seem specific to specific industries, they are > actually common across many. Textiles, bulk foods, metal, and electronic > components are just a few examples. > - Ability to import descriptions (including all the options, pictures, text, > etc) from another company's catalog for many products at the same time. > Assume the other company is running same software for starters, but do it in > a way that isn't specific to one program and is easily modifiable. But > start with basic import/export. Descriptions of parts can be complicated. > Distrubutors and retailers may carry hundreds, thousands, or even millions of > items. Distributor should be able to import from manufacturer and > retailer from distributor. Various types of filtering should be > provided. Shouldn't just be a one time import - details change. New > products are added, products are discontinued, details are updated, wholesale > costs change. New items should go in a queue to be approved before being > added. Some parts of the description may come from upstream, others may be > local. > Metal is a particularly nasty example, as a customer, because shipping > charges can be a substantial fraction of the order cost (aluminum) or even > far exceed it (steel is cheaper and heavier). Thus, it is advantage to order > from a nearby supplier. However, due in no small part to software > limitations, only a few companies have functional online ordering for metals. > Proper support in an open source package would make it possible for large > numbers of local suppliers to provide online ordering. Individual local > distributors typically won't pay for custom development or expensive > proprietary solutions. Especially for something that is not specific to > their company or even their industry but is actually something that should be > a standard feature of all e-commerce packages that want to be taken > seriously. They also aren't likely to be too hot on the idea of spending a > lot of money funding an open source implementation that their competitors can > use for free. And this hurts local customers, engineers (overhead for > ordering parts for prototypes or budgeting pricing is worse than if you were > ordering a 1000 parts), local manufacturers, and the local and national > economy. And since real companies with complicated products may need > sophisticated company specific customization over and above the standard > stuff described here, it needs to be one with a reasonable license, not GPL. > Ultimately, implementing these is in the interests of society. I would do it > myself, for that reason, if I had the time. However, I have a whole lot > more complicated stuff to work on. This is fairly easy, in comparison > (though time consuming). This is likely to be more than a few plugins - > chances are some weaknesses in the core will be exposed. > Not only should these features be implemented, but the online demo's should > show them off. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.