Drupal 6 / Ubercart - Automatically set Adjustment SKU

1.4k views Asked by At

Is it possible to automatically set adjustment alternate SKU values for a product in Ubercart?

Basically every product will have a suffix added to it's original SKU based on the adjustment, so it would save a lot of time to populate the adjustment SKU's automatically when the product node is created.

3

There are 3 answers

0
Jane Panda On BEST ANSWER

This may not be the -right- way to do it, but I created a small module that taps into the nodeapi insert operation:

<?php

function photo_form_alter(&$form, &$form_state, $form_id) {
    if ($form_id == 'photo_node_form'){
        $form['base']['model']['#default_value'] = 'placeholder';
    }
}

function photo_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
    switch($op){
        case 'presave':
            if($node->model == 'placeholder')
                $node->model = $node->field_image_cache2[0]['filename'];    
        break;
        case 'insert':
            $nid = $node->nid;
            $sku_dl = $node->model.'d';

    //======  Setup Adjustments  ======
            db_query('INSERT INTO {uc_product_adjustments} (nid,combination,model) VALUES'
                .'('.$nid.',"%s","'.$sku_dl.'"),'
                .'('.$nid.',"%s","'.$sku_dl.'"),'
                .'('.$nid.',"%s","'.$sku_dl.'"),'
                .'('.$nid.',"%s","'.$sku_dl.'"),'
                .'('.$nid.',"%s","'.$sku_dl.'")'
                ,serialize(array('1'=>'1'))
                ,serialize(array('1'=>'3'))
                ,serialize(array('1'=>'4'))
                ,serialize(array('1'=>'5'))
                ,serialize(array('1'=>'6'))
            );

    //======  Add file download on purchase  ====== 
            $file_name = $node->field_image_cache2[0]['filename'];

            db_query("INSERT INTO {uc_files} (filename) VALUES ('%s')",$file_name);

            db_query("INSERT INTO {uc_file_products} (pfid, fid, model, description, shippable) VALUES (%d, LAST_INSERT_ID(), '%s', '%s', %d)", 0, $sku_dl, '', 1);
            db_query('UPDATE {uc_file_products} SET pfid = LAST_INSERT_ID() WHERE fpid = LAST_INSERT_ID() LIMIT 1');

            db_query("INSERT INTO {uc_product_features} (pfid, fid, nid, description) VALUES (LAST_INSERT_ID(), '%s', %d, '%s')", 'file',  $nid, '<b>Filename</b><br/>'.$file_name.'<br/> <b>Reference</b> : '.$sku_dl);
        break;  
    }
}
0
doublejosh On

Have a look at http://drupal.org/project/uc_product_power_tools

Appears this can be done off the shelf.

0
Guy Bedford On

Here's a JavaScript version - it provides a link to automatically generate the SKUs as well as a 'default stock' option on the stock page.

Drupal.behaviors.autoSKU = function(){
    //if we're on the product adjustments page, add a button to automatically set sku's
    if($('#uc-product-adjustments-form').length > 0){
        $('#uc-product-adjustments-form').before($('<a>Automatically set SKU\'s</a>').css('cursor', 'pointer').click(function(){
            $base = $('#uc-product-adjustments-form').attr('action').substr(6, 4) + '-';
            $('#uc-product-adjustments-form .form-text').each(function(){
                $(this).attr('value', $base + $(this).parents('tr').attr('title').toLowerCase().replace(new RegExp(' ', 'g'),'-'));
            });
        }));
    }

    //if we're on the stock page, automatically set as active and set default stock level
    if($('#uc-stock-edit-form').length > 0){
        $('#uc-stock-edit-form').before($('<a>Activate and Set Default Stock</a>').css('cursor', 'pointer').click(function(){
            $first = true;
            $('#uc-stock-edit-form .form-checkbox').each(function(){
                if($first){
                    $(this).attr('checked', false);
                    $first = false;
                }
                else{
                    $(this).attr('checked', true);
                }
            });

            $set_stock = $('#edit-stock-0-stock').attr('value');
            $odd = true;
            $('#uc-stock-edit-form .form-text').each(function(){
                if($odd){
                    $(this).attr('value', $set_stock);
                }
                $odd = !$odd;
            });
        }));
    }
}