[ic] Adding code to order processing area

Rick Bragg lists at gmnet.net
Thu Apr 16 15:22:12 UTC 2009


On Wed, 2009-04-15 at 18:49 -0700, Peter wrote:
> On 04/15/2009 09:41 AM, Rick Bragg wrote:
> > Hi,
> > 
> > Where is the best place to add some custom code to where the order gets
> > processed?  
> 
> etc/log_transaction
> 
> > I don't mind if it means changing core IC code, as I already do that.
> 
> You should try to avoid that.  In fact, the only time you should ever
> have to really do that is to fix bugs and then you should be sending us
> patches so we can fix them in our core code.  There are some rare cases
> where you might need to add new functionality to core as well, but keep
> in mind that whenever you go to upgrade the IC core all your changes
> will be lost.
> 
> 
> Peter


Hi Peter,

update_order_status is what I was looking for.  I agree about making
changes to core files.  Speaking of this file and changes to core, This
is one of the changes that I made.  Actually, I didn't make it, it was
suggested here:
http://www.icdevgroup.org/pipermail/interchange-users/2005-May/043065.html

I hope this fix gets into the next version of IC.


Anyway, I need to make an additional change in order to call an outside
program.  the outside program takes 3 args, a store ID, a sku, and a
quantity.  The outside program decrements the inventory of the store's
POS system.



I think my change should be in the following area:

......

        # Actually update the orderline database
        for(@$lines_ary) {
                my $code = $_->[$odb_keypos];
                my $line = $code;
                $line =~ s/.*\D//;
                next if $already{$line};
               my $status = $shipping{$line} ? $target_status : $linestatus{$code};
#::logDebug("Setting $code to $status");
                $odb->set_field($code, 'status', $status)
                        or do {
                                $::Scratch->{ui_message} = "Orderline $code ship status update failed.";
                                return;
                        };
                if($dotime) {
                        $odb->set_field($code, 'update_date', $update_date)
                                or do {
                                        $::Scratch->{ui_message} = "Orderline $code ship date update failed.";
                                        return;
                                };
                }



### Call my outside program code here for inventory syncing...
###           something like:
###           my catalogname = $Config->{CatalogName};
###           system `mycustomsyncprogram --catid $catalogname --sku $sku --quantity $quantity`;



        }


.........



In order to make it compatible with stores that don't use this, I will
need to set a system variable like __USE_CUSTOM_INVENTORY_SYNC__ and
pass that in somehow... Also I should put it through some kind of try
block

The point is I want the POS sync to happen ONLY when the item is
actually shipped, not at checkout.  I will keep the IC inventory in
place as is, but this is a separate inventory database for the POS.

Does this sound like I'm on the right track? Any suggestions?

Thanks!
Rick









-- 
This message has been scanned for viruses and
dangerous content by Green Mountain Network, and is
believed to be clean.




More information about the interchange-users mailing list