Copy quote make fields editable / update calculated fields

Hi,

for a customer who uses the quotes module a lot we want to be able to copy an existing quote and update the products on the copy with new data from the producttemplate ( they change prices etc on the producttemplate, they don't create new templates..). I got it working so far that when I click the duplicate button the lines are copied and the data is being updated using a ajax request for the various templates. This does work by validating in the create.js if we have a copy context and if so we copy all the data needed from the producttemplates. 

I currently have two issues left: 

- When I copy a quote the productbundle items are copied but the calculated fields are not updated until I save the quote

- Certain fields are readonly. 

Could someone point me into the right direction so I can solve both issues? 

if(options.context.get('copy') === true && !_.isEmpty(options.context.get("relatedRecords"))){
            _.each(options.context.get("relatedRecords"), function(entry){
                if(entry._module  === "ProductBundles"){
                    _.each(entry.product_bundle_items,function(bundleItem){
                        var productTemplateId = bundleItem.get("product_template_id");
                        if(!_.isEmpty(productTemplateId)){

                            var url = app.api.buildURL('ProductTemplates/'+productTemplateId, '', {}, {});
                            app.api.call('read',url,{},{
                                success: _.bind(function(bundleItem,response){
                                    console.log('succesfully retrieved data from template??');
                                    bundleItem.set('name',response.name);
                                    bundleItem.set('category_id',response.category_id);
                                    bundleItem.set('category_name',response.category_name);
                                    bundleItem.set('mft_part_num',response.mft_part_num);
                                    bundleItem.set('list_price',response.list_price);
                                    bundleItem.set('cost_price',response.cost_price);
                                    bundleItem.set('discount_price',response.discount_price);
                                    bundleItem.set('list_usdollar',response.list_usdollar);
                                    bundleItem.set('cost_usdollar',response.cost_usdollar);
                                    bundleItem.set('discount_usdollar',response.discount_usdollar);
                                    bundleItem.set('tax_class',response.tax_class);
                                    bundleItem.set('weight',response.weight);
                                    bundleItem.set('type_id',response.type_id);
                                    bundleItem.set('type_name',response.type_name);
                                    bundleItem.set('manufacturer_id',response.manufacturer_id);
                                    bundleItem.set('manufacturer_name',response.manufacturer_name);
                                    bundleItem.set('currency_id',response.currency_id);
                                    bundleItem.set('base_rate',response.base_rate);
                                    bundleItem.set('isCopied',false);
                                },this,bundleItem)
                            });
                        }
                    });
                }
            });
        }

Parents
  • Hi

    We faced a similar issue at a customer's instance, maybe our solutions may help you:

    file: custom/modules/ProductBundles/clients/base/views/quote-data-group-list/quote-data-group-list.js, method onAddNewItemToGroup.


    Add the lines

            this.qliListMetadata = app.metadata.getView('Products', 'quote-data-group-list');
            this._fields = _.flatten(_.pluck(this.qliListMetadata.panels, 'fields'));
    

    between variable declarations

    		var relatedModel = app.data.createRelatedBean(this.model, null, linkName);
    		var quoteModel = this.context.get('parentModel');
    		var maxPositionModel;
    		var position = 0;
    		var $relatedRow;
    		var moduleName = linkName === 'products' ? 'Products' : 'ProductBundleNotes';
    		var modelData = {};
    		var groupLineNumObj;
    		// these quoteModel values will be overwritten if prepopulateData
    		// already has currency_id or base_rate already set
    		var currencyId = quoteModel.get('currency_id');
    		var baseRate = quoteModel.get('base_rate');
    		var newLineNum;
    

    and line

    		prepopulateData = prepopulateData || {};
    

    This workaround fix dependencies issues in lines after first one.

    André Lopes
    Lampada Global
    Skype: andre.lampada
  • Hey André just curious, we run that code during initialize. What changes between initialize and onAddNewItemToGroup that you need to run those again or why did you guys find that fixes the issue?

    Thanks!

Reply Children
No Data