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.

Reply via email to