def build_delivery_address_form(request): """ Builds a form class representing form asking for delivery addresses for items of an order. """ def init(self, *args, **kwargs): kwargs["initial"] = self.__initial super(self.__class__, self).__init__(*args, **kwargs) def has_items(self): """ Returns True if there are items which to choose addresses for. """ return self.__items.exists() def has_addresses(self): """ Returns True if there are addresses which to choose from. """ return self.__addresses.exists() def get_address_fields(self): """ Iterates through all address field_dict in form. """ for name in self.__address_fields: yield BoundField(self, self.__address_fields[name], name) def get_item_address_pairs(self): """ Iterates through all (order items / address) pairs displayed on the form. """ for field_name in self.__address_fields: yield (self.__items.get(id__exact=field_name.split("_")[1]), self.cleaned_data.get(field_name)) def clean_hdnValidationHash(self): """ Ensures that the validation hash gotten from sent form is correct. """ given_hash = self.cleaned_data.get("hdnValidationHash") our_hash = ShoppingCartItem.validation_hash_for_shopping_cart(request) if not given_hash == our_hash: self.add_common_error(CHECKOUT_ERR_MSG_INVALID_HASH) items = ShoppingCartItem.items_of_user_with_albums_and_addresses( request.user) addresses = Address.addresses_of_user(request.user) validation_hash = ShoppingCartItem.validation_hash_for_shopping_cart( request) field_dict = {} address_field_dict = {} initial_value_dict = {} field_dict["hdnValidationHash"] = forms.CharField( widget=forms.HiddenInput()) initial_value_dict["hdnValidationHash"] = validation_hash for item in items: field_name = u"cmbAddress_" + unicode(item.id) new_field = DeliveryAddressChoiceField(queryset=addresses, empty_label=None, label=item.album.title) field_dict[field_name] = new_field address_field_dict[field_name] = new_field if item.deliveryAddress: initial_value_dict[field_name] = item.deliveryAddress members = { "__request": request, "__items": items, "__addresses": addresses, "__validation_hash": validation_hash, "base_fields": field_dict, "__address_fields": address_field_dict, "__initial": initial_value_dict, "has_items": has_items, "has_addresses": has_addresses, "address_fields": get_address_fields, "item_address_pairs": get_item_address_pairs, "clean_hdnValidationHash": clean_hdnValidationHash, "__init__": init } return type("DeliveryAddressForm", (CommonAlbumizerBaseForm, ), members)
def build_delivery_address_form(request): """ Builds a form class representing form asking for delivery addresses for items of an order. """ def init(self, *args, **kwargs): kwargs["initial"] = self.__initial super(self.__class__, self).__init__(*args, **kwargs) def has_items(self): """ Returns True if there are items which to choose addresses for. """ return self.__items.exists() def has_addresses(self): """ Returns True if there are addresses which to choose from. """ return self.__addresses.exists() def get_address_fields(self): """ Iterates through all address field_dict in form. """ for name in self.__address_fields: yield BoundField(self, self.__address_fields[name], name) def get_item_address_pairs(self): """ Iterates through all (order items / address) pairs displayed on the form. """ for field_name in self.__address_fields: yield (self.__items.get(id__exact = field_name.split("_")[1]), self.cleaned_data.get(field_name)) def clean_hdnValidationHash(self): """ Ensures that the validation hash gotten from sent form is correct. """ given_hash = self.cleaned_data.get("hdnValidationHash") our_hash = ShoppingCartItem.validation_hash_for_shopping_cart(request) if not given_hash == our_hash: self.add_common_error(CHECKOUT_ERR_MSG_INVALID_HASH) items = ShoppingCartItem.items_of_user_with_albums_and_addresses(request.user) addresses = Address.addresses_of_user(request.user) validation_hash = ShoppingCartItem.validation_hash_for_shopping_cart(request) field_dict = {} address_field_dict = {} initial_value_dict = {} field_dict["hdnValidationHash"] = forms.CharField( widget = forms.HiddenInput() ) initial_value_dict["hdnValidationHash"] = validation_hash for item in items: field_name = u"cmbAddress_" + unicode(item.id) new_field = DeliveryAddressChoiceField( queryset = addresses, empty_label = None, label = item.album.title ) field_dict[field_name] = new_field address_field_dict[field_name] = new_field if item.deliveryAddress: initial_value_dict[field_name] = item.deliveryAddress members = { "__request": request, "__items": items, "__addresses": addresses, "__validation_hash": validation_hash, "base_fields": field_dict, "__address_fields": address_field_dict, "__initial": initial_value_dict, "has_items": has_items, "has_addresses": has_addresses, "address_fields": get_address_fields, "item_address_pairs": get_item_address_pairs, "clean_hdnValidationHash": clean_hdnValidationHash, "__init__": init } return type("DeliveryAddressForm", (CommonAlbumizerBaseForm,), members)