def __call__(self): """ Self-submitting form that displays ShopItem Variations and updates them """ form = self.request.form if form.get('remove_level'): variation_config = IVariationConfig(self.context) variation_config.remove_level() if form.get('reduce_level'): variation_config = IVariationConfig(self.context) variation_config.reduce_level() if form.get('add_level'): variation_config = IVariationConfig(self.context) variation_config.add_level() if form.get('addvalue'): fn = None idx_and_pos = form.get('addvalue') idx, pos = idx_and_pos.split('-') idx = int(idx) pos = int(pos) + 1 if idx == 0: fn = 'variation1_values' elif idx == 1: fn = 'variation2_values' variation_config = IVariationConfig(self.context) values = list(self.context.getField(fn).get(self.context)) var_dict = variation_config.getVariationDict() new_var_dict = {} pps = getMultiAdapter((self.context, self.request), name='plone_portal_state') language = pps.language() new_description = translate(_('label_new_description', default=u'New description'), domain='ftw.shop', context=self.context, target_language=language) DEFAULT_VARDATA = {'active':True, 'price': '0.00', 'skuCode': '99999', 'description': new_description} if len(variation_config.getVariationAttributes()) == 2: values1 = list(self.context.getField('variation1_values').get(self.context)) values2 = list(self.context.getField('variation2_values').get(self.context)) # Create a dict mapping old combination indexes to the new ones code_map = {} if idx == 0: for i in range(len(values1)): for j in range(len(values2)): old_vcode = "var-%s-%s" % (i, j) if i >= pos: new_vcode = "var-%s-%s" % (i + 1, j) code_map[old_vcode] = new_vcode else: code_map[old_vcode] = old_vcode elif idx == 1: for i in range(len(values1)): for j in range(len(values2)): old_vcode = "var-%s-%s" % (i, j) if j >= pos: new_vcode = "var-%s-%s" % (i, j + 1) code_map[old_vcode] = new_vcode else: code_map[old_vcode] = old_vcode # Based on the code map, reorder the var_dict for old_vcode in code_map.keys(): new_vcode = code_map[old_vcode] new_var_dict[new_vcode] = var_dict[old_vcode] # Now add some default variation data for the value just added if idx == 0: for j in range(len(values2)): vcode = "var-%s-%s" % (pos, j) new_var_dict[vcode] = DEFAULT_VARDATA elif idx == 1: for i in range(len(values1)): vcode = "var-%s-%s" % (i, pos) new_var_dict[vcode] = DEFAULT_VARDATA elif len(variation_config.getVariationAttributes()) == 1: assert(idx == 0) values1 = list(self.context.getField('variation1_values').get(self.context)) # Create a dict mapping old combination indexes to the new ones code_map = {} for i in range(len(values1)): old_vcode = "var-%s" % (i) if i >= pos: new_vcode = "var-%s" % (i + 1) code_map[old_vcode] = new_vcode else: code_map[old_vcode] = old_vcode # Based on the code map, reorder the var_dict for old_vcode in code_map.keys(): new_vcode = code_map[old_vcode] new_var_dict[new_vcode] = var_dict[old_vcode] # Now add some default variation data for the value just added vcode = "var-%s" % pos new_var_dict[vcode] = DEFAULT_VARDATA # Finally purge and update the var_dict variation_config.purge_dict() variation_config.updateVariationConfig(new_var_dict) pps = getMultiAdapter((self.context, self.request), name='plone_portal_state') language = pps.language() new_value = translate(_('label_new_value', default=u'New value'), domain='ftw.shop', context=self.context, target_language=language) values.insert(pos, new_value) self.context.getField(fn).set(self.context, values) if form.get('delvalue'): fn = None idx_and_pos = form.get('delvalue') idx, pos = idx_and_pos.split('-') idx = int(idx) pos = int(pos) if idx == 0: fn = 'variation1_values' elif idx == 1: fn = 'variation2_values' values = list(self.context.getField(fn).get(self.context)) variation_config = IVariationConfig(self.context) var_dict = variation_config.getVariationDict() new_var_dict = {} if len(variation_config.getVariationAttributes()) == 2: values1 = list(self.context.getField('variation1_values').get(self.context)) values2 = list(self.context.getField('variation2_values').get(self.context)) # Create a dict mapping old combination indexes to the new ones code_map = {} if idx == 0: for i in range(len(values1)): for j in range(len(values2)): old_vcode = "var-%s-%s" % (i, j) if i > pos: new_vcode = "var-%s-%s" % (i - 1, j) code_map[old_vcode] = new_vcode elif i == pos: code_map[old_vcode] = None else: code_map[old_vcode] = old_vcode elif idx == 1: for i in range(len(values1)): for j in range(len(values2)): old_vcode = "var-%s-%s" % (i, j) if j > pos: new_vcode = "var-%s-%s" % (i, j - 1) code_map[old_vcode] = new_vcode elif j == pos: code_map[old_vcode] = None else: code_map[old_vcode] = old_vcode # Based on the code map, reorder the var_dict for old_vcode in code_map.keys(): new_vcode = code_map[old_vcode] new_var_dict[new_vcode] = var_dict[old_vcode] elif len(variation_config.getVariationAttributes()) == 1: assert(idx == 0) values1 = list(self.context.getField('variation1_values').get(self.context)) # Create a dict mapping old combination indexes to the new ones code_map = {} for i in range(len(values1)): old_vcode = "var-%s" % (i) if i >= pos: new_vcode = "var-%s" % (i - 1) code_map[old_vcode] = new_vcode else: code_map[old_vcode] = old_vcode # Based on the code map, reorder the var_dict for old_vcode in code_map.keys(): new_vcode = code_map[old_vcode] new_var_dict[new_vcode] = var_dict[old_vcode] # # Finally purge and update the var_dict variation_config.purge_dict() variation_config.updateVariationConfig(new_var_dict) values.pop(int(pos)) self.context.getField(fn).set(self.context, values) if form.get('update_structure'): var_config = IVariationConfig(self.context) vattr0 = form.get('vattr-0', None) vattr1 = form.get('vattr-1', None) if len(var_config.getVariationAttributes()) >= 1: self.context.getField('variation1_attribute').set(self.context, vattr0) new_values = [] for i in range(len(var_config.getVariation1Values())): new_value = form.get('vvalue-%s-%s' % (0, i)) new_values.append(new_value) self.context.getField('variation1_values').set(self.context, new_values) if len(var_config.getVariationAttributes()) >= 2: self.context.getField('variation2_attribute').set(self.context, vattr1) new_values = [] for j in range(len(var_config.getVariation2Values())): new_value = form.get('vvalue-%s-%s' % (1, j)) new_values.append(new_value) self.context.getField('variation2_values').set(self.context, new_values) # Make sure we had a proper form submit, not just a GET request submitted = form.get('form.submitted', False) if submitted: variation_config = IVariationConfig(self.context) edited_var_data = self._parse_edit_variations_form() variation_config.updateVariationConfig(edited_var_data) IStatusMessage(self.request).addStatusMessage( _(u'msg_variations_saved', default=u"Variations saved."), type="info") self.request.RESPONSE.redirect(self.context.absolute_url()) return self.template()
def __call__(self): """ Self-submitting form that displays ShopItem Variations and updates them """ form = self.request.form if form.get('remove_level'): variation_config = IVariationConfig(self.context) variation_config.remove_level() if form.get('reduce_level'): variation_config = IVariationConfig(self.context) variation_config.reduce_level() if form.get('add_level'): variation_config = IVariationConfig(self.context) variation_config.add_level() if form.get('addvalue'): fn = None idx_and_pos = form.get('addvalue') idx, pos = idx_and_pos.split('-') idx = int(idx) pos = int(pos) + 1 if idx == 0: fn = 'variation1_values' elif idx == 1: fn = 'variation2_values' variation_config = IVariationConfig(self.context) values = list(self.context.getField(fn).get(self.context)) var_dict = variation_config.getVariationDict() new_var_dict = {} pps = getMultiAdapter((self.context, self.request), name='plone_portal_state') language = pps.language() new_description = translate(_('label_new_description', default=u'New description'), domain='ftw.shop', context=self.context, target_language=language) DEFAULT_VARDATA = { 'active': True, 'price': '0.00', 'skuCode': '99999', 'description': new_description } if len(variation_config.getVariationAttributes()) == 2: values1 = list( self.context.getField('variation1_values').get( self.context)) values2 = list( self.context.getField('variation2_values').get( self.context)) # Create a dict mapping old combination indexes to the new ones code_map = {} if idx == 0: for i in range(len(values1)): for j in range(len(values2)): old_vcode = "var-%s-%s" % (i, j) if i >= pos: new_vcode = "var-%s-%s" % (i + 1, j) code_map[old_vcode] = new_vcode else: code_map[old_vcode] = old_vcode elif idx == 1: for i in range(len(values1)): for j in range(len(values2)): old_vcode = "var-%s-%s" % (i, j) if j >= pos: new_vcode = "var-%s-%s" % (i, j + 1) code_map[old_vcode] = new_vcode else: code_map[old_vcode] = old_vcode # Based on the code map, reorder the var_dict for old_vcode in code_map.keys(): new_vcode = code_map[old_vcode] new_var_dict[new_vcode] = var_dict[old_vcode] # Now add some default variation data for the value just added if idx == 0: for j in range(len(values2)): vcode = "var-%s-%s" % (pos, j) new_var_dict[vcode] = DEFAULT_VARDATA elif idx == 1: for i in range(len(values1)): vcode = "var-%s-%s" % (i, pos) new_var_dict[vcode] = DEFAULT_VARDATA elif len(variation_config.getVariationAttributes()) == 1: assert (idx == 0) values1 = list( self.context.getField('variation1_values').get( self.context)) # Create a dict mapping old combination indexes to the new ones code_map = {} for i in range(len(values1)): old_vcode = "var-%s" % (i) if i >= pos: new_vcode = "var-%s" % (i + 1) code_map[old_vcode] = new_vcode else: code_map[old_vcode] = old_vcode # Based on the code map, reorder the var_dict for old_vcode in code_map.keys(): new_vcode = code_map[old_vcode] new_var_dict[new_vcode] = var_dict[old_vcode] # Now add some default variation data for the value just added vcode = "var-%s" % pos new_var_dict[vcode] = DEFAULT_VARDATA # Finally purge and update the var_dict variation_config.purge_dict() variation_config.updateVariationConfig(new_var_dict) pps = getMultiAdapter((self.context, self.request), name='plone_portal_state') language = pps.language() new_value = translate(_('label_new_value', default=u'New value'), domain='ftw.shop', context=self.context, target_language=language) values.insert(pos, new_value) self.context.getField(fn).set(self.context, values) if form.get('delvalue'): fn = None idx_and_pos = form.get('delvalue') idx, pos = idx_and_pos.split('-') idx = int(idx) pos = int(pos) if idx == 0: fn = 'variation1_values' elif idx == 1: fn = 'variation2_values' values = list(self.context.getField(fn).get(self.context)) variation_config = IVariationConfig(self.context) var_dict = variation_config.getVariationDict() new_var_dict = {} if len(variation_config.getVariationAttributes()) == 2: values1 = list( self.context.getField('variation1_values').get( self.context)) values2 = list( self.context.getField('variation2_values').get( self.context)) # Create a dict mapping old combination indexes to the new ones code_map = {} if idx == 0: for i in range(len(values1)): for j in range(len(values2)): old_vcode = "var-%s-%s" % (i, j) if i > pos: new_vcode = "var-%s-%s" % (i - 1, j) code_map[old_vcode] = new_vcode elif i == pos: code_map[old_vcode] = None else: code_map[old_vcode] = old_vcode elif idx == 1: for i in range(len(values1)): for j in range(len(values2)): old_vcode = "var-%s-%s" % (i, j) if j > pos: new_vcode = "var-%s-%s" % (i, j - 1) code_map[old_vcode] = new_vcode elif j == pos: code_map[old_vcode] = None else: code_map[old_vcode] = old_vcode # Based on the code map, reorder the var_dict for old_vcode in code_map.keys(): new_vcode = code_map[old_vcode] new_var_dict[new_vcode] = var_dict[old_vcode] elif len(variation_config.getVariationAttributes()) == 1: assert (idx == 0) values1 = list( self.context.getField('variation1_values').get( self.context)) # Create a dict mapping old combination indexes to the new ones code_map = {} for i in range(len(values1)): old_vcode = "var-%s" % (i) if i >= pos: new_vcode = "var-%s" % (i - 1) code_map[old_vcode] = new_vcode else: code_map[old_vcode] = old_vcode # Based on the code map, reorder the var_dict for old_vcode in code_map.keys(): new_vcode = code_map[old_vcode] new_var_dict[new_vcode] = var_dict[old_vcode] # # Finally purge and update the var_dict variation_config.purge_dict() variation_config.updateVariationConfig(new_var_dict) values.pop(int(pos)) self.context.getField(fn).set(self.context, values) if form.get('update_structure'): var_config = IVariationConfig(self.context) vattr0 = form.get('vattr-0', None) vattr1 = form.get('vattr-1', None) if len(var_config.getVariationAttributes()) >= 1: self.context.getField('variation1_attribute').set( self.context, vattr0) new_values = [] for i in range(len(var_config.getVariation1Values())): new_value = form.get('vvalue-%s-%s' % (0, i)) new_values.append(new_value) self.context.getField('variation1_values').set( self.context, new_values) if len(var_config.getVariationAttributes()) >= 2: self.context.getField('variation2_attribute').set( self.context, vattr1) new_values = [] for j in range(len(var_config.getVariation2Values())): new_value = form.get('vvalue-%s-%s' % (1, j)) new_values.append(new_value) self.context.getField('variation2_values').set( self.context, new_values) # Make sure we had a proper form submit, not just a GET request submitted = form.get('form.submitted', False) if submitted: variation_config = IVariationConfig(self.context) edited_var_data = self._parse_edit_variations_form() variation_config.updateVariationConfig(edited_var_data) IStatusMessage(self.request).addStatusMessage(_( u'msg_variations_saved', default=u"Variations saved."), type="info") self.request.RESPONSE.redirect(self.context.absolute_url()) return self.template()