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
Reply
  • 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
Children