After a lot of searching and digging in drupal.org I found out that there's currently no modules that enhance ubercart's core attributes & options functionalities in the following way:
1) establishes dependencies between attributes;
2) establishes dependencies between specified options and attributes;
3) by establishing the above dependencies, the selection/deselection of certain options in certain attributes results in the enabling/disabling of their depending attributes/options.
This module aims to provide a solution for this.
I am aware of the Dependent Attributes module (http://drupal.org/project/uc_dependent_attributes), which is able to define similar dependencies on a per product basis. For each product you create, you have to click into the edit & adjustment tab to disable/enable combinations of options. I assume it works if you have a few products (for example, selling services). But it can be extremely tedious for mid to large size ubercart shops. So I want to build a module that is able to define per product class attributes and options dependencies. That's why this module is needed.
Some features of this module:
1) CANO supports two types of dependency between options and attributes: Disable, and Enable.
For example, if on loading your default option of Attribute A is No, and in this case you want to disable the dependant attribute B, then you'll need to define this: "No" of Attribute A --> Disable --> Attribute B. As a result, on loading of any product page of this class, Attribute B is disabled and hidden. And if a customer selects "Yes" of Attribute A, then Attribute B will be enabled and displayed. You can, however, impose dependency of Attribute B on the "Yes" option of Attribute A to either Enable (not necessary but doable) or Disable as well.
2) CANO supports recursive hierarchy of relations. A recursive dependency handler is implemented. See these two scenarios. Say M2M is an option of Attribute A, and Custom Lenght is Attribute B (which has two option: Yes / No), and Length is Attribute C;
i). M2M -> Disables -> Custom Lenght, and Custom Length -> Yes -> Enables -> Length
output : when I selected M2M, the custom length was disabled and hence the Length was too. So it was a positive output.
ii). M2M -> Enables -> Custom Length, and Custom Length -> Yes -> Disables -> Length
ouput : when I selected M2M, the custom Length as enabled and hence the Length was too, as the default selection of custom length was not "Yes". So it was a positvie output.
3) CANO is designed in a way so that even "Required" attributes can be disabled and hidden if necessary. In order to do this, CANO super-imposes "NULL" string to these attributes when customers put the product in shopping cart so that ubercart won't complain. This is very useful because in many situations, there're attributes that you want them to be required if enabled. This is not possible in any other ubercart modules.
4) CANO establishes the dependencies between Attributes and Options in per product-class level. No definition is needed on per product level.
This module is maitained by Vizteck Solutions.