erp_products 3.0.1 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,19 +3,41 @@ module ErpProducts
3
3
  module Desktop
4
4
  module ProductManager
5
5
  class BaseController < ::ErpApp::Desktop::BaseController
6
+
6
7
  def index
7
- products = ProductType.all.collect do |product_type|
8
- {
9
- :id => product_type.id,
10
- :title => product_type.description,
11
- :imageUrl => product_type.images.empty? ? '/images/img_blank.png' : product_type.images.first.data.url(nil, :escape => false),
12
- :price => product_type.get_current_simple_amount_with_currency.nil? ? 'no price set' : product_type.get_current_simple_amount_with_currency,
13
- :available => product_type.inventory_entries.first.number_available,
14
- :sold => product_type.inventory_entries.first.number_sold,
15
- :sku => product_type.inventory_entries.first.sku.nil? ? '' : product_type.inventory_entries.first.sku
16
- }
17
- end
8
+ products = []
9
+ ProductType.all.each do |product_type|
10
+ product_hash = product_type.to_hash(
11
+ :only => [:id, :description => :title],
12
+ :additional_values => {
13
+ :imageUrl => (product_type.images.empty? ? '/images/img_blank.png' : product_type.images.first.data.url(nil, :escape => false))
14
+ })
15
+
16
+ #I do not like this, need to find a better way
17
+ if product_type.respond_to?(:get_current_simple_amount_with_currency)
18
+ product_hash[:price] = product_type.get_current_simple_amount_with_currency.nil? ? 'no price set' : product_type.get_current_simple_amount_with_currency
19
+ end
20
+
21
+ #I do not like this, need to find a better way
22
+ if product_type.respond_to?(:inventory_entries)
23
+ inventory_entry = if product_type.inventory_entries.empty?
24
+ InventoryEntry.create(
25
+ :product_type => product_type,
26
+ :number_available => 0,
27
+ :number_sold => 0,
28
+ :description => product_type.description
29
+ )
30
+ else
31
+ product_type.inventory_entries.first
32
+ end
18
33
 
34
+ product_hash[:available] = inventory_entry.number_available
35
+ product_hash[:sold] = inventory_entry.number_sold
36
+ product_hash[:sku] = inventory_entry.sku.nil? ? '' : inventory_entry.sku
37
+ end
38
+
39
+ products << product_hash
40
+ end
19
41
  render :json => {:products => products}
20
42
  end
21
43
 
@@ -40,8 +62,6 @@ module ErpProducts
40
62
  end
41
63
 
42
64
  def new
43
- result = {}
44
-
45
65
  title = params[:title]
46
66
  description = params[:description]
47
67
 
@@ -55,27 +75,10 @@ module ErpProducts
55
75
  )
56
76
 
57
77
  if product_type.save
58
- #create inventory
59
- inventory_entry = InventoryEntry.new(
60
- :product_type => product_type,
61
- :number_available => 0,
62
- :number_sold => 0,
63
- :description => product_type.description
64
- )
65
-
66
- if inventory_entry.save
67
- result[:success] = true
68
- result[:id] = product_type.id
69
- else
70
- product_type.destroy
71
- result[:success] = false
72
- end
73
-
78
+ render :json => {:success => true, :id => product_type.id}
74
79
  else
75
- result[:success] = false
80
+ render :json => {:success => false}
76
81
  end
77
-
78
- render :json => result
79
82
  end
80
83
 
81
84
  def delete
@@ -101,7 +104,7 @@ module ErpProducts
101
104
  result = {}
102
105
 
103
106
  begin
104
- name = request.env['HTTP_X_FILE_NAME'].blank? ? params[:file_data].original_filename : request.env['HTTP_X_FILE_NAME']
107
+ name = request.env['HTTP_X_FILE_NAME'].blank? ? params[:file_data].original_filename : request.env['HTTP_X_FILE_NAME']
105
108
  data = request.env['HTTP_X_FILE_NAME'].blank? ? params[:file_data] : request.raw_post
106
109
 
107
110
  product_type = ProductType.find(params[:product_type_id])
@@ -124,110 +127,9 @@ module ErpProducts
124
127
  render :json => (FileAsset.find(params[:id]).destroy) ? {:success => true} : {:success => false}
125
128
  end
126
129
 
127
- #
128
- #Prices
129
- #
130
-
131
- def currencies
132
- Currency.include_root_in_json = false
133
- render :inline => "{currencies:#{Currency.all.to_json(:only => [:id, :internal_identifier])}}"
134
- end
135
-
136
- def prices
137
- result = {:prices => []}
138
-
139
- product_type = ProductType.find(params[:id])
140
- product_type.pricing_plans.each do |pricing_plan|
141
- result[:prices] << {
142
- :pricing_plan_id => pricing_plan.id,
143
- :price => pricing_plan.money_amount,
144
- :currency => pricing_plan.currency.id,
145
- :currency_display => pricing_plan.currency.internal_identifier,
146
- :from_date => pricing_plan.from_date,
147
- :thru_date => pricing_plan.thru_date,
148
- :description => pricing_plan.description,
149
- :comments => pricing_plan.comments
150
- }
151
- end
152
-
153
- render :json => result
154
- end
155
-
156
-
157
- #pricing uses one form for new models and updates. So we use one action
158
- def new_and_update_price
159
- result = {}
160
-
161
- if params[:pricing_plan_id].blank?
162
- pricing_plan = PricingPlan.new(
163
- :money_amount => params[:price],
164
- :comments => params[:comments],
165
- :currency => Currency.find(params[:currency]),
166
- :from_date => Date.strptime(params[:from_date], '%m/%d/%Y').to_date,
167
- :thru_date => Date.strptime(params[:thru_date], '%m/%d/%Y').to_date,
168
- :description => params[:description],
169
- :is_simple_amount => true
170
- )
171
-
172
- if pricing_plan.save
173
- product_type = ProductType.find(params[:product_type_id])
174
- product_type.pricing_plans << pricing_plan
175
- if product_type.save
176
- result[:success] = true
177
- else
178
- pricing_plan.destroy
179
- result[:success] = false
180
- end
181
- else
182
- result[:success] = false
183
- end
184
- else
185
- pricing_plan = PricingPlan.find(params[:pricing_plan_id])
186
- pricing_plan.money_amount = params[:price]
187
- pricing_plan.currency = Currency.find(params[:currency])
188
- pricing_plan.from_date = Date.strptime(params[:from_date], '%m/%d/%Y').to_date
189
- pricing_plan.thru_date = Date.strptime(params[:thru_date], '%m/%d/%Y').to_date
190
- pricing_plan.description = params[:description]
191
- pricing_plan.comments = params[:comments]
192
-
193
- if pricing_plan.save
194
- result[:success] = true
195
- else
196
- result[:success] = false
197
- end
198
- end
199
-
200
- render :json => result
201
- end
202
-
203
- def delete_price
204
- render :json => (PricingPlan.find(params[:id]).destroy) ? {:success => true} : {:success => false}
205
- end
206
-
207
- #
208
- #Inventory
209
- #
210
-
211
- def inventory
212
- result = {}
213
-
214
- inventory_entry = InventoryEntry.find_by_product_type_id(params[:id])
215
- result[:number_available] = inventory_entry.number_available
216
- result[:sku] = inventory_entry.sku
217
-
218
- render :json => result
219
- end
220
-
221
- def update_inventory
222
- inventory_entry = InventoryEntry.find_by_product_type_id(params[:product_type_id])
223
- inventory_entry.sku = params[:sku]
224
- inventory_entry.number_available = params[:number_available]
225
-
226
- render :json => (inventory_entry.save) ? {:success => true} : {:success => false}
227
- end
228
130
 
229
- end
230
- end
231
- end
232
- end
233
- end
131
+ end#BaseController
132
+ end#ProductManager
133
+ end#Desktop
134
+ end#ErpApp
135
+ end#ErpProducts
@@ -1,7 +1,6 @@
1
1
  class ProductInstance < ActiveRecord::Base
2
2
  acts_as_nested_set
3
3
  include ErpTechSvcs::Utils::DefaultNestedSetMethods
4
- acts_as_priceable
5
4
 
6
5
  belongs_to :product_type
7
6
  belongs_to :product_instance_status_type
@@ -1,8 +1,7 @@
1
1
  class ProductType < ActiveRecord::Base
2
2
  acts_as_nested_set
3
3
  include ErpTechSvcs::Utils::DefaultNestedSetMethods
4
-
5
- acts_as_priceable
4
+
6
5
  has_file_assets
7
6
  is_describable
8
7
 
@@ -2,7 +2,7 @@ module ErpProducts
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 0
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].compact.join('.')
8
8
  end
@@ -36,6 +36,9 @@ Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager",{
36
36
  }
37
37
  });
38
38
 
39
+ Compass.ErpApp.Desktop.Applications.ProductManager.widgets = [];
40
+ Compass.ErpApp.Desktop.Applications.ProductManager.selectedProductTypeId = null;
41
+
39
42
  //
40
43
  //form to manage description and title
41
44
  //
@@ -44,7 +47,7 @@ Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager.ProductDescriptio
44
47
  extend:"Ext.form.Panel",
45
48
  alias:'widget.productmanager_productdescriptionform',
46
49
  initComponent: function() {
47
- Compass.ErpApp.Desktop.Applications.ProductManager.ProductDescriptionForm.superclass.initComponent.call(this, arguments);
50
+ this.callParent(arguments);
48
51
 
49
52
  this.addEvents(
50
53
  /**
@@ -136,338 +139,7 @@ Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager.ProductDescriptio
136
139
  ]
137
140
  }, config);
138
141
 
139
- Compass.ErpApp.Desktop.Applications.ProductManager.ProductDescriptionForm.superclass.constructor.call(this, config);
140
- }
141
- });
142
-
143
- //
144
- //form to manage pricing
145
- //
146
-
147
- Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager.ProductPricingPanel",{
148
- extend:"Ext.panel.Panel",
149
- alias:'widget.productmanager_productpricingpanel',
150
- updatePrice : function(rec){
151
- this.addEditPriceBtn.setText('Update Price');
152
- this.cancelBtn.show();
153
- this.addPriceFormPanel.getForm().setValues(rec.data);
154
- },
155
-
156
- deletePrice : function(rec){
157
- var self = this;
158
- Ext.MessageBox.confirm('Confirm', 'Are you sure you want to delete this price?', function(btn){
159
- if(btn == 'no'){
160
- return false;
161
- }
162
- else
163
- {
164
- Ext.Ajax.request({
165
- url: '/erp_products/erp_app/desktop/product_manager/delete_price/'+rec.get('pricing_plan_id'),
166
- success: function(response) {
167
- var obj = Ext.decode(response.responseText);
168
- if(obj.success){
169
- Ext.getCmp('productListPanel').loadProducts();
170
- self.pricesGridPanel.getStore().load();
171
- }
172
- else{
173
- Ext.Msg.alert('Error', 'Error deleting price.');
174
- }
175
- },
176
- failure: function(response) {
177
- Ext.Msg.alert('Error', 'Error deleting price.');
178
- }
179
- });
180
- }
181
- });
182
- },
183
-
184
- initComponent: function() {
185
- Compass.ErpApp.Desktop.Applications.ProductManager.ProductPricingPanel.superclass.initComponent.call(this, arguments);
186
- },
187
-
188
- constructor : function(config) {
189
- var self = this;
190
-
191
- this.pricesGridPanel = Ext.create("Ext.grid.Panel",{
192
- layout:'fit',
193
- region:'center',
194
- split:true,
195
- columns: [
196
- {
197
- header:'Description',
198
- width:310,
199
- sortable: false,
200
- dataIndex: 'description'
201
- },
202
- {
203
- header: 'Price',
204
- width: 75,
205
- sortable: true,
206
- dataIndex: 'price',
207
- renderer:function(v){
208
- return v.toFixed(2);
209
- }
210
- },
211
- {
212
- header: 'Currency',
213
- width: 75,
214
- sortable: true,
215
- dataIndex: 'currency_display'
216
- },
217
- {
218
- header: 'From Date',
219
- width: 90,
220
- sortable: true,
221
- dataIndex: 'from_date',
222
- renderer: Ext.util.Format.dateRenderer('m/d/Y')
223
- },
224
- {
225
- header: 'Thru Date',
226
- width: 90,
227
- sortable: true,
228
- dataIndex: 'thru_date',
229
- renderer: Ext.util.Format.dateRenderer('m/d/Y')
230
- },
231
- {
232
- menuDisabled:true,
233
- resizable:false,
234
- xtype:'actioncolumn',
235
- header:'Update',
236
- align:'center',
237
- width:60,
238
- items:[{
239
- icon:'/images/icons/edit/edit_16x16.png',
240
- tooltip:'Update',
241
- handler :function(grid, rowIndex, colIndex){
242
- var rec = grid.getStore().getAt(rowIndex);
243
- self.updatePrice(rec);
244
- }
245
- }]
246
- },
247
- {
248
- menuDisabled:true,
249
- resizable:false,
250
- xtype:'actioncolumn',
251
- header:'Delete',
252
- align:'center',
253
- width:60,
254
- items:[{
255
- icon:'/images/icons/delete/delete_16x16.png',
256
- tooltip:'Delete',
257
- handler :function(grid, rowIndex, colIndex){
258
- var rec = grid.getStore().getAt(rowIndex);
259
- self.deletePrice(rec);
260
- }
261
- }]
262
- },
263
- {
264
- menuDisabled:true,
265
- resizable:false,
266
- xtype:'actioncolumn',
267
- header:'Comment',
268
- align:'center',
269
- width:60,
270
- items:[{
271
- getClass: function(v, meta, rec) { // Or return a class from a function
272
- this.items[0].tooltip = rec.get('comments');
273
- return 'info-col';
274
- },
275
- handler: function(grid, rowIndex, colIndex) {
276
- return false;
277
- }
278
- }]
279
- }
280
- ],
281
- loadMask: true,
282
- stripeRows: true,
283
- store: Ext.create("Ext.data.Store",{
284
- autoLoad: true,
285
- proxy:{
286
- type:'ajax',
287
- url: '/erp_products/erp_app/desktop/product_manager/prices/'+config.productTypeId,
288
- reader:{
289
- root: 'prices',
290
- type:'json'
291
- }
292
- },
293
- fields:[{
294
- name:'price',
295
- type:'decimal'
296
- }, 'currency', 'currency_display', 'from_date', 'thru_date', 'description','comments','pricing_plan_id']
297
- })
298
- });
299
-
300
- this.addEditPriceBtn = Ext.create("Ext.button.Button",{
301
- scope:this,
302
- text:'Add Price',
303
- handler:function(btn){
304
- var formPanel = btn.findParentByType('form');
305
- var basicForm = formPanel.getForm();
306
-
307
- basicForm.submit({
308
- reset:true,
309
- success:function(form, action){
310
- var obj = Ext.decode(action.response.responseText);
311
- if(obj.success){
312
- self.addEditPriceBtn.setText('Add Price');
313
- self.cancelBtn.hide();
314
- Ext.getCmp('productListPanel').loadProducts();
315
- self.pricesGridPanel.getStore().load();
316
- }
317
- else{
318
- Ext.Msg.alert("Error", 'Error creating price');
319
- }
320
- },
321
- failure:function(form, action){
322
- Ext.Msg.alert("Error", 'Error creating price');
323
- }
324
- });
325
- }
326
- });
327
-
328
- this.cancelBtn = Ext.create("Ext.button.Button",{
329
- text:'Cancel',
330
- hidden:true,
331
- handler:function(btn){
332
- var formPanel = btn.findParentByType('form');
333
- var basicForm = formPanel.getForm();
334
- basicForm.reset();
335
- self.addEditPriceBtn.setText('Add Price');
336
- self.cancelBtn.hide();
337
- }
338
- });
339
-
340
- this.addPriceFormPanel = Ext.create("Ext.form.Panel",{
341
- layout:'anchor',
342
- collapsible:true,
343
- split:true,
344
- height:175,
345
- frame:true,
346
- region:'south',
347
- buttonAlign:'center',
348
- bodyStyle:'padding:5px 5px 0',
349
- url:'/erp_products/erp_app/desktop/product_manager/new_and_update_price',
350
- items: [
351
- {
352
- xtype:'textfield',
353
- width:400,
354
- name:'description',
355
- fieldLabel:'Description'
356
- },
357
- {
358
- layout:'column',
359
- xtype:'container',
360
- frame:false,
361
- border:false,
362
- defaults:{
363
- columnWidth:0.25,
364
- border:false,
365
- frame:false,
366
- xtype:'container',
367
- bodyStyle:'padding:0 18px 0 0'
368
- },
369
- items:[{
370
- items:[
371
- {
372
- fieldLabel:'Price',
373
- xtype:'numberfield',
374
- width:200,
375
- layout:'anchor',
376
- allowBlank:false,
377
- name:'price'
378
- }
379
- ]
380
- },
381
- {
382
- items:[
383
- {
384
- fieldLabel:'Currency',
385
- xtype:'combo',
386
- width:200,
387
- id : 'call_center_party_country',
388
- allowBlank : false,
389
- store :Ext.create("Ext.data.Store",{
390
- autoLoad: true,
391
- proxy:{
392
- type:'ajax',
393
- url: '/erp_products/erp_app/desktop/product_manager/currencies',
394
- reader:{
395
- root: 'currencies',
396
- type:'json'
397
- }
398
- },
399
- fields: [
400
- {
401
- name:'internal_identifier'
402
- },
403
- {
404
- name:'id'
405
- }
406
- ]
407
- }),
408
- hiddenName: 'currency',
409
- hiddenField: 'currency',
410
- valueField: 'id',
411
- displayField: 'internal_identifier',
412
- forceSelection : true,
413
- triggerAction : 'all',
414
- name:'currency'
415
- }
416
- ]
417
- },
418
- {
419
- items:[
420
- {
421
- fieldLabel:'From Date',
422
- xtype:'datefield',
423
- width:200,
424
- allowBlank:false,
425
- name:'from_date'
426
- }
427
- ]
428
- },
429
- {
430
- items:[
431
- {
432
- fieldLabel:'Thru Date',
433
- xtype:'datefield',
434
- width:200,
435
- allowBlank:false,
436
- name:'thru_date'
437
- }
438
- ]
439
- }]
440
- },
441
- {
442
- xtype:'textarea',
443
- height:50,
444
- width:400,
445
- name:'comments',
446
- fieldLabel:'Comments'
447
- },
448
- {
449
- xtype:'hidden',
450
- name:'product_type_id',
451
- value:config.productTypeId
452
- },
453
- {
454
- xtype:'hidden',
455
- name:'pricing_plan_id'
456
- }
457
- ],
458
- buttons:[
459
- this.addEditPriceBtn,
460
- this.cancelBtn
461
- ]
462
- });
463
-
464
- config = Ext.apply({
465
- title:'Pricing',
466
- layout:'border',
467
- items:[this.pricesGridPanel,this.addPriceFormPanel]
468
- }, config);
469
-
470
- Compass.ErpApp.Desktop.Applications.ProductManager.ProductPricingPanel.superclass.constructor.call(this, config);
142
+ this.callParent([config]);
471
143
  }
472
144
  });
473
145
 
@@ -588,74 +260,7 @@ Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager.ProductImagesPane
588
260
  }
589
261
  }, config);
590
262
 
591
- Compass.ErpApp.Desktop.Applications.ProductManager.ProductImagesPanel.superclass.constructor.call(this, config);
592
- }
593
- });
594
-
595
- //
596
- //Inventory Management
597
- //
598
-
599
- Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager.InventoryFormPanel",{
600
- extend:"Ext.form.Panel",
601
- alias:'widget.productmanager_inventoryformpanel',
602
- initComponent: function() {
603
- Compass.ErpApp.Desktop.Applications.ProductManager.InventoryFormPanel.superclass.initComponent.call(this, arguments);
604
- },
605
-
606
- constructor : function(config) {
607
- config = Ext.apply({
608
- title:'Inventory',
609
- frame:true,
610
- buttonAlign:'left',
611
- bodyStyle:'padding:5px 5px 0',
612
- url:'/erp_products/erp_app/desktop/product_manager/update_inventory',
613
- items:[
614
- {
615
- fieldLabel:'SKU #',
616
- xtype:'textfield',
617
- allowBlank:true,
618
- name:'sku'
619
- },{
620
- fieldLabel:'# Available',
621
- xtype:'numberfield',
622
- allowBlank:false,
623
- name:'number_available'
624
- },
625
- {
626
- xtype:'hidden',
627
- name:'product_type_id',
628
- value:config.productTypeId
629
- },
630
- ],
631
- buttons:[
632
- {
633
- text:'Update',
634
- handler:function(btn){
635
- var formPanel = btn.findParentByType('form');
636
- var basicForm = formPanel.getForm();
637
-
638
- basicForm.submit({
639
- reset:false,
640
- success:function(form, action){
641
- var obj = Ext.decode(action.response.responseText);
642
- if(obj.success){
643
- Ext.getCmp('productListPanel').loadProducts();
644
- }
645
- else{
646
- Ext.Msg.alert("Error", 'Error creating price');
647
- }
648
- },
649
- failure:function(form, action){
650
- Ext.Msg.alert("Error", 'Error creating price');
651
- }
652
- });
653
- }
654
- }
655
- ]
656
- }, config);
657
-
658
- Compass.ErpApp.Desktop.Applications.ProductManager.InventoryFormPanel.superclass.constructor.call(this, config);
263
+ this.callParent([config]);
659
264
  }
660
265
  });
661
266
 
@@ -666,9 +271,6 @@ Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager.InventoryFormPane
666
271
  Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager.AddProductWindow",{
667
272
  extend:"Ext.window.Window",
668
273
  alias:'widget.productmanager_addproductwindow',
669
- initComponent: function() {
670
- Compass.ErpApp.Desktop.Applications.ProductManager.AddProductWindow.superclass.initComponent.call(this, arguments);
671
- },
672
274
 
673
275
  constructor : function(config) {
674
276
  var self = this;
@@ -695,7 +297,7 @@ Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager.AddProductWindow"
695
297
  }
696
298
  }, config);
697
299
 
698
- Compass.ErpApp.Desktop.Applications.ProductManager.AddProductWindow.superclass.constructor.call(this, config);
300
+ this.callParent([config]);
699
301
  }
700
302
  });
701
303
 
@@ -706,13 +308,10 @@ Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager.AddProductWindow"
706
308
  Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager.UpdateProductWindow",{
707
309
  extend:"Ext.window.Window",
708
310
  alias:'widget.productmanager_updateproductwindow',
709
- initComponent: function() {
710
- Compass.ErpApp.Desktop.Applications.ProductManager.UpdateProductWindow.superclass.initComponent.call(this, arguments);
711
- },
712
-
713
311
  constructor : function(config) {
714
312
  var self = this;
715
313
  var activeTab = config['activeTab'] | 0
314
+ Compass.ErpApp.Desktop.Applications.ProductManager.selectedProductTypeId = config.productTypeId;
716
315
 
717
316
  var tabLayout = {
718
317
  xtype:'tabpanel',
@@ -748,29 +347,6 @@ Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager.UpdateProductWind
748
347
  {
749
348
  xtype:'productmanager_productimagespanel',
750
349
  productTypeId:config.productTypeId
751
- },
752
- {
753
- xtype:'productmanager_productpricingpanel',
754
- productTypeId:config.productTypeId
755
- },
756
- {
757
- xtype:'productmanager_inventoryformpanel',
758
- productTypeId:config.productTypeId,
759
- listeners:{
760
- 'activate':function(panel){
761
- var self = this;
762
- Ext.Ajax.request({
763
- url: '/erp_products/erp_app/desktop/product_manager/inventory/'+panel.initialConfig['productTypeId'],
764
- success: function(response) {
765
- var obj = Ext.decode(response.responseText);
766
- self.getForm().setValues(obj);
767
- },
768
- failure: function(response) {
769
- Ext.Msg.alert('Error', 'Error loading inventory.');
770
- }
771
- });
772
- }
773
- }
774
350
  }
775
351
  ]
776
352
  }
@@ -784,11 +360,17 @@ Ext.define("Compass.ErpApp.Desktop.Applications.ProductManager.UpdateProductWind
784
360
  items:[tabLayout],
785
361
  listeners:{
786
362
  show:function(comp){
787
- comp.query('tabpanel')[0].setActiveTab(activeTab);
363
+ var tabPanel = comp.down('tabpanel');
364
+
365
+ Ext.each(Compass.ErpApp.Desktop.Applications.ProductManager.widgets,function(widget){
366
+ tabPanel.add(widget);
367
+ });
368
+
369
+ tabPanel.setActiveTab(activeTab);
788
370
  }
789
371
  }
790
372
  }, config);
791
373
 
792
- Compass.ErpApp.Desktop.Applications.ProductManager.UpdateProductWindow.superclass.constructor.call(this, config);
374
+ this.callParent([config]);
793
375
  }
794
376
  });
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: erp_products
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,41 +9,30 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-17 00:00:00.000000000 Z
12
+ date: 2012-05-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: erp_app
16
- requirement: &70708660 !ruby/object:Gem::Requirement
16
+ requirement: &2153107000 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - =
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 3.0.1
21
+ version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70708660
25
- - !ruby/object:Gem::Dependency
26
- name: erp_agreements
27
- requirement: &70706130 !ruby/object:Gem::Requirement
28
- none: false
29
- requirements:
30
- - - =
31
- - !ruby/object:Gem::Version
32
- version: 3.0.1
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: *70706130
24
+ version_requirements: *2153107000
36
25
  - !ruby/object:Gem::Dependency
37
26
  name: erp_dev_svcs
38
- requirement: &70730990 !ruby/object:Gem::Requirement
27
+ requirement: &2153106500 !ruby/object:Gem::Requirement
39
28
  none: false
40
29
  requirements:
41
- - - =
30
+ - - ~>
42
31
  - !ruby/object:Gem::Version
43
- version: 3.0.1
32
+ version: '3.0'
44
33
  type: :development
45
34
  prerelease: false
46
- version_requirements: *70730990
35
+ version_requirements: *2153106500
47
36
  description: ! 'The Products Engine implements ProductType and ProductInstance, as
48
37
  well as a number of classes to support product catalog-type functions and search/shopping
49
38
  scenarios. '
@@ -53,81 +42,80 @@ executables: []
53
42
  extensions: []
54
43
  extra_rdoc_files: []
55
44
  files:
56
- - public/stylesheets/erp_app/desktop/applications/product_manager/style.css
57
- - public/javascripts/erp_app/desktop/applications/product_manager/product_list_panel.js
58
45
  - public/javascripts/erp_app/desktop/applications/product_manager/module.js
59
- - app/assets/stylesheets/erp_products/application.css
46
+ - public/javascripts/erp_app/desktop/applications/product_manager/product_list_panel.js
47
+ - public/stylesheets/erp_app/desktop/applications/product_manager/style.css
60
48
  - app/assets/javascripts/erp_products/application.js
61
- - app/views/layouts/erp_products/application.html.erb
62
- - app/models/product_package.rb
49
+ - app/assets/stylesheets/erp_products/application.css
50
+ - app/controllers/erp_products/erp_app/desktop/product_manager/base_controller.rb
51
+ - app/helpers/erp_products/application_helper.rb
63
52
  - app/models/prod_availability_status_type.rb
53
+ - app/models/prod_instance_reln.rb
54
+ - app/models/prod_instance_reln_type.rb
64
55
  - app/models/prod_instance_role_type.rb
65
56
  - app/models/prod_type_reln.rb
66
- - app/models/product_type.rb
67
- - app/models/product_offer.rb
68
- - app/models/simple_product_offer.rb
69
- - app/models/prod_instance_reln_type.rb
70
- - app/models/prod_instance_reln.rb
71
- - app/models/prod_type_role_type.rb
72
57
  - app/models/prod_type_reln_type.rb
58
+ - app/models/prod_type_role_type.rb
73
59
  - app/models/product_instance.rb
74
- - app/helpers/erp_products/application_helper.rb
75
- - app/controllers/erp_products/erp_app/desktop/product_manager/base_controller.rb
60
+ - app/models/product_offer.rb
61
+ - app/models/product_package.rb
62
+ - app/models/product_type.rb
63
+ - app/models/simple_product_offer.rb
76
64
  - config/routes.rb
77
- - db/migrate/20080805000040_base_products.rb
78
- - db/migrate/20080805000041_base_products_indexes.rb
65
+ - db/data_migrations/20110324010232_product_role_types.rb
79
66
  - db/data_migrations/20110527160807_add_default_prod_avail_types.rb
80
67
  - db/data_migrations/20110728201730_create_desktop_app_product_manager.rb
81
- - db/data_migrations/20110324010232_product_role_types.rb
68
+ - db/migrate/20080805000040_base_products.rb
69
+ - db/migrate/20080805000041_base_products_indexes.rb
82
70
  - lib/erp_products/engine.rb
83
- - lib/erp_products/extensions.rb
84
- - lib/erp_products/extensions/active_record/acts_as_product_type.rb
85
- - lib/erp_products/extensions/active_record/acts_as_product_offer.rb
86
71
  - lib/erp_products/extensions/active_record/acts_as_product_instance.rb
72
+ - lib/erp_products/extensions/active_record/acts_as_product_offer.rb
73
+ - lib/erp_products/extensions/active_record/acts_as_product_type.rb
74
+ - lib/erp_products/extensions.rb
87
75
  - lib/erp_products/version.rb
88
76
  - lib/erp_products.rb
89
77
  - lib/tasks/erp_products_tasks.rake
90
78
  - GPL-3-LICENSE
91
79
  - Rakefile
92
80
  - README.rdoc
93
- - spec/spec_helper.rb
94
- - spec/models/prod_type_role_type_spec.rb
95
- - spec/models/prod_type_reln_spec.rb
96
- - spec/models/product_package_spec.rb
97
- - spec/models/prod_instance_reln_type_spec.rb
98
- - spec/models/prod_instance_role_type_spec.rb
99
- - spec/models/simple_product_offer_spec.rb
100
- - spec/models/prod_type_reln_type_spec.rb
101
- - spec/models/product_instance_spec.rb
102
- - spec/models/prod_instance_reln_spec.rb
103
- - spec/models/prod_availability_status_type_spec.rb
104
- - spec/models/product_offer_spec.rb
105
- - spec/models/product_type_spec.rb
106
- - spec/dummy/public/422.html
107
- - spec/dummy/public/404.html
108
- - spec/dummy/public/500.html
109
- - spec/dummy/public/favicon.ico
110
- - spec/dummy/config.ru
111
- - spec/dummy/app/assets/stylesheets/application.css
112
81
  - spec/dummy/app/assets/javascripts/application.js
113
- - spec/dummy/app/views/layouts/application.html.erb
114
- - spec/dummy/app/helpers/application_helper.rb
82
+ - spec/dummy/app/assets/stylesheets/application.css
115
83
  - spec/dummy/app/controllers/application_controller.rb
116
- - spec/dummy/config/routes.rb
117
- - spec/dummy/config/locales/en.yml
118
- - spec/dummy/config/boot.rb
84
+ - spec/dummy/app/helpers/application_helper.rb
85
+ - spec/dummy/app/views/layouts/application.html.erb
119
86
  - spec/dummy/config/application.rb
87
+ - spec/dummy/config/boot.rb
88
+ - spec/dummy/config/database.yml
89
+ - spec/dummy/config/environment.rb
120
90
  - spec/dummy/config/environments/spec.rb
121
- - spec/dummy/config/initializers/mime_types.rb
122
- - spec/dummy/config/initializers/session_store.rb
123
91
  - spec/dummy/config/initializers/backtrace_silencers.rb
124
- - spec/dummy/config/initializers/wrap_parameters.rb
125
92
  - spec/dummy/config/initializers/inflections.rb
93
+ - spec/dummy/config/initializers/mime_types.rb
126
94
  - spec/dummy/config/initializers/secret_token.rb
127
- - spec/dummy/config/environment.rb
128
- - spec/dummy/config/database.yml
95
+ - spec/dummy/config/initializers/session_store.rb
96
+ - spec/dummy/config/initializers/wrap_parameters.rb
97
+ - spec/dummy/config/locales/en.yml
98
+ - spec/dummy/config/routes.rb
99
+ - spec/dummy/config.ru
100
+ - spec/dummy/public/404.html
101
+ - spec/dummy/public/422.html
102
+ - spec/dummy/public/500.html
103
+ - spec/dummy/public/favicon.ico
129
104
  - spec/dummy/Rakefile
130
105
  - spec/dummy/script/rails
106
+ - spec/models/prod_availability_status_type_spec.rb
107
+ - spec/models/prod_instance_reln_spec.rb
108
+ - spec/models/prod_instance_reln_type_spec.rb
109
+ - spec/models/prod_instance_role_type_spec.rb
110
+ - spec/models/prod_type_reln_spec.rb
111
+ - spec/models/prod_type_reln_type_spec.rb
112
+ - spec/models/prod_type_role_type_spec.rb
113
+ - spec/models/product_instance_spec.rb
114
+ - spec/models/product_offer_spec.rb
115
+ - spec/models/product_package_spec.rb
116
+ - spec/models/product_type_spec.rb
117
+ - spec/models/simple_product_offer_spec.rb
118
+ - spec/spec_helper.rb
131
119
  homepage: http://development.compassagile.com
132
120
  licenses: []
133
121
  post_install_message:
@@ -148,48 +136,48 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
136
  version: '0'
149
137
  requirements: []
150
138
  rubyforge_project:
151
- rubygems_version: 1.8.10
139
+ rubygems_version: 1.8.15
152
140
  signing_key:
153
141
  specification_version: 3
154
142
  summary: The Products Engine implements ProductType and ProductInstance, as well as
155
143
  a number of classes to support product catalog-type functions and search/shopping
156
144
  scenarios.
157
145
  test_files:
158
- - spec/spec_helper.rb
159
- - spec/models/prod_type_role_type_spec.rb
160
- - spec/models/prod_type_reln_spec.rb
161
- - spec/models/product_package_spec.rb
162
- - spec/models/prod_instance_reln_type_spec.rb
163
- - spec/models/prod_instance_role_type_spec.rb
164
- - spec/models/simple_product_offer_spec.rb
165
- - spec/models/prod_type_reln_type_spec.rb
166
- - spec/models/product_instance_spec.rb
167
- - spec/models/prod_instance_reln_spec.rb
168
- - spec/models/prod_availability_status_type_spec.rb
169
- - spec/models/product_offer_spec.rb
170
- - spec/models/product_type_spec.rb
171
- - spec/dummy/public/422.html
172
- - spec/dummy/public/404.html
173
- - spec/dummy/public/500.html
174
- - spec/dummy/public/favicon.ico
175
- - spec/dummy/config.ru
176
- - spec/dummy/app/assets/stylesheets/application.css
177
146
  - spec/dummy/app/assets/javascripts/application.js
178
- - spec/dummy/app/views/layouts/application.html.erb
179
- - spec/dummy/app/helpers/application_helper.rb
147
+ - spec/dummy/app/assets/stylesheets/application.css
180
148
  - spec/dummy/app/controllers/application_controller.rb
181
- - spec/dummy/config/routes.rb
182
- - spec/dummy/config/locales/en.yml
183
- - spec/dummy/config/boot.rb
149
+ - spec/dummy/app/helpers/application_helper.rb
150
+ - spec/dummy/app/views/layouts/application.html.erb
184
151
  - spec/dummy/config/application.rb
152
+ - spec/dummy/config/boot.rb
153
+ - spec/dummy/config/database.yml
154
+ - spec/dummy/config/environment.rb
185
155
  - spec/dummy/config/environments/spec.rb
186
- - spec/dummy/config/initializers/mime_types.rb
187
- - spec/dummy/config/initializers/session_store.rb
188
156
  - spec/dummy/config/initializers/backtrace_silencers.rb
189
- - spec/dummy/config/initializers/wrap_parameters.rb
190
157
  - spec/dummy/config/initializers/inflections.rb
158
+ - spec/dummy/config/initializers/mime_types.rb
191
159
  - spec/dummy/config/initializers/secret_token.rb
192
- - spec/dummy/config/environment.rb
193
- - spec/dummy/config/database.yml
160
+ - spec/dummy/config/initializers/session_store.rb
161
+ - spec/dummy/config/initializers/wrap_parameters.rb
162
+ - spec/dummy/config/locales/en.yml
163
+ - spec/dummy/config/routes.rb
164
+ - spec/dummy/config.ru
165
+ - spec/dummy/public/404.html
166
+ - spec/dummy/public/422.html
167
+ - spec/dummy/public/500.html
168
+ - spec/dummy/public/favicon.ico
194
169
  - spec/dummy/Rakefile
195
170
  - spec/dummy/script/rails
171
+ - spec/models/prod_availability_status_type_spec.rb
172
+ - spec/models/prod_instance_reln_spec.rb
173
+ - spec/models/prod_instance_reln_type_spec.rb
174
+ - spec/models/prod_instance_role_type_spec.rb
175
+ - spec/models/prod_type_reln_spec.rb
176
+ - spec/models/prod_type_reln_type_spec.rb
177
+ - spec/models/prod_type_role_type_spec.rb
178
+ - spec/models/product_instance_spec.rb
179
+ - spec/models/product_offer_spec.rb
180
+ - spec/models/product_package_spec.rb
181
+ - spec/models/product_type_spec.rb
182
+ - spec/models/simple_product_offer_spec.rb
183
+ - spec/spec_helper.rb
@@ -1,14 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>ErpProducts</title>
5
- <%= stylesheet_link_tag "erp_products/application" %>
6
- <%= javascript_include_tag "erp_products/application" %>
7
- <%= csrf_meta_tags %>
8
- </head>
9
- <body>
10
-
11
- <%= yield %>
12
-
13
- </body>
14
- </html>