diff --git a/ecommerce/static/js/models/subscription_model.js b/ecommerce/static/js/models/subscription_model.js index 1a54669d77c..0185717c2b0 100644 --- a/ecommerce/static/js/models/subscription_model.js +++ b/ecommerce/static/js/models/subscription_model.js @@ -49,6 +49,7 @@ define([ defaults: { id: null, title: null, + description: '', subscription_type: SUBSCRIPTION_TYPES.limited_access, subscription_duration_value: 0, subscription_duration_unit: SUBSCRIPTION_DURATION_UNITS.days, diff --git a/ecommerce/static/js/views/subscription_detail_view.js b/ecommerce/static/js/views/subscription_detail_view.js index 3762f74cf02..4ebd0dc1315 100644 --- a/ecommerce/static/js/views/subscription_detail_view.js +++ b/ecommerce/static/js/views/subscription_detail_view.js @@ -41,6 +41,7 @@ define([ templateData, id = this.model.get('id'), title = this.model.get('title'), + description = this.model.get('description'), subscriptionType = SubscriptionUtils.formatSubscriptionType(this.model.get('subscription_type')), subscriptionStatus = this.model.get('subscription_status'), dateCreated = this.model.get('date_created'), @@ -54,6 +55,7 @@ define([ templateData = { id, title, + description, subscription_type: subscriptionType, subscription_status: subscriptionStatus, subscription_actual_price: subscriptionActualPrice, diff --git a/ecommerce/static/js/views/subscription_form_view.js b/ecommerce/static/js/views/subscription_form_view.js index aca5c581292..72d51acd3fa 100644 --- a/ecommerce/static/js/views/subscription_form_view.js +++ b/ecommerce/static/js/views/subscription_form_view.js @@ -9,27 +9,21 @@ define([ 'ecommerce', 'underscore', 'underscore.string', - 'utils/utils', 'text!templates/_alert_div.html', 'text!templates/subscription_form.html', - 'models/subscription_model', - 'collections/subscription_collection', 'views/form_view', ], function($, - Backbone, - BackboneSuper, - BackboneValidation, - BackboneStickit, - ecommerce, - _, - _s, - Utils, - AlertDivTemplate, - SubscriptionFormTemplate, - Subscription, - Subscriptions, - FormView) { + Backbone, + BackboneSuper, + BackboneValidation, + BackboneStickit, + ecommerce, + _, + _s, + AlertDivTemplate, + SubscriptionFormTemplate, + FormView) { 'use strict'; return FormView.extend({ @@ -56,10 +50,13 @@ define([ }, ], - baseCouponBindings: { + baseSubscriptionBindings: { 'input[name=title]': { observe: 'title' }, + 'textarea[name=description]': { + observe: 'description' + }, 'input[name=subscription_type]': { observe: 'subscription_type' }, @@ -92,7 +89,7 @@ define([ }, bindings: function() { - return _.extend({}, this.baseCouponBindings); + return _.extend({}, this.baseSubscriptionBindings); }, events: { @@ -103,6 +100,7 @@ define([ getEditableAttributes: function() { return [ 'title', + 'description', 'subscription_active_status', ]; }, diff --git a/ecommerce/static/js/views/subscription_list_view.js b/ecommerce/static/js/views/subscription_list_view.js index d243c868240..47e41b30bb3 100644 --- a/ecommerce/static/js/views/subscription_list_view.js +++ b/ecommerce/static/js/views/subscription_list_view.js @@ -37,7 +37,7 @@ define([ subscription_actual_price: subscription.get('subscription_actual_price') + ' USD', subscription_price: subscription.get('subscription_price') + ' USD', subscription_status: subscription.get('subscription_status') ? 'Active': 'Inactive', - date_created: moment(subscription.get('date_created')).format('MMMM DD, YYYY, h:mm A'), + date_created: moment.utc(subscription.get('date_created')).format('MMMM DD, YYYY, h:mm A'), course_payments: subscription.get('course_payments', true) }; }, diff --git a/ecommerce/static/templates/subscription_detail.html b/ecommerce/static/templates/subscription_detail.html index f91e61e1e21..2f8144597d2 100644 --- a/ecommerce/static/templates/subscription_detail.html +++ b/ecommerce/static/templates/subscription_detail.html @@ -25,6 +25,13 @@

<%= dateEdited %> + <% if(description) {%> +
+
<%= gettext('Subscription Description:') %>
+
<%= description %>
+
+ <%}%> + <% if(subscription_actual_price) {%>
<%= gettext('Subscription Actual Price:') %>
diff --git a/ecommerce/static/templates/subscription_form.html b/ecommerce/static/templates/subscription_form.html index c797a0105b5..e953e523d62 100644 --- a/ecommerce/static/templates/subscription_form.html +++ b/ecommerce/static/templates/subscription_form.html @@ -6,6 +6,12 @@

+
+ + +

+
+
diff --git a/ecommerce/subscriptions/api/v2/serializers.py b/ecommerce/subscriptions/api/v2/serializers.py index d1b3cef8fa5..e2e113264c4 100644 --- a/ecommerce/subscriptions/api/v2/serializers.py +++ b/ecommerce/subscriptions/api/v2/serializers.py @@ -92,7 +92,7 @@ def get_is_course_payments_enabled(self, product): class Meta: model = Product fields = [ - 'id', 'title', 'subscription_type', 'subscription_actual_price', 'subscription_price', + 'id', 'title', 'date_created', 'subscription_type', 'subscription_actual_price', 'subscription_price', 'subscription_status', 'display_order', 'partner_sku', 'is_course_payments_enabled' ] @@ -212,6 +212,7 @@ def create(self, validated_data): raise Exception(message) title = validated_data['title'] + description = validated_data['description'] subscription_attributes = self._get_subscription_attributes(validated_data) partner = self.context['partner'] try: @@ -219,6 +220,7 @@ def create(self, validated_data): product_class = ProductClass.objects.get(name=SUBSCRIPTION_PRODUCT_CLASS_NAME) subscription = Product.objects.create( title=title, + description=description, course=None, is_discountable=True, structure=Product.STANDALONE, @@ -240,6 +242,7 @@ def update(self, subscription, validated_data): Update a subscription product. """ subscription.title = validated_data['title'] + subscription.description = validated_data['description'] attribute_values = self._get_subscription_attributes(validated_data) self._save_subscription_attributes(subscription, attribute_values) subscription.save() @@ -325,6 +328,7 @@ def _create_conditional_offer(self, subscription, partner): class Meta: model = Product fields = ( - 'id', 'title', 'subscription_type', 'subscription_actual_price', 'subscription_price', 'subscription_status', + 'id', 'title', 'description', 'date_created', 'date_updated', + 'subscription_type', 'subscription_status', 'subscription_actual_price', 'subscription_price', 'subscription_number_of_courses', 'subscription_duration_value', 'subscription_duration_unit' ) diff --git a/ecommerce/subscriptions/api/v2/tests/factories.py b/ecommerce/subscriptions/api/v2/tests/factories.py index e5212eb229b..5cd0ede229f 100644 --- a/ecommerce/subscriptions/api/v2/tests/factories.py +++ b/ecommerce/subscriptions/api/v2/tests/factories.py @@ -73,6 +73,7 @@ class Meta(object): model = Product title = FuzzyText() + description = FuzzyText() product_class = SubFactory(ProductClassFactory) stockrecords = RelatedFactory('oscar.test.factories.StockRecordFactory', 'product') diff --git a/ecommerce/subscriptions/api/v2/tests/test_serializers.py b/ecommerce/subscriptions/api/v2/tests/test_serializers.py index 33d5c313f34..6dc5c5d22b6 100644 --- a/ecommerce/subscriptions/api/v2/tests/test_serializers.py +++ b/ecommerce/subscriptions/api/v2/tests/test_serializers.py @@ -32,9 +32,11 @@ def test_list_serializer(self): 'partner': self.partner } subscription = self.create_subscription() + date_created = str(subscription.date_created).replace(' ', 'T').replace('+00:00', 'Z') expected_data = { 'id': subscription.id, 'title': subscription.title, + 'date_created': date_created, 'subscription_type': subscription.attr.subscription_type.option, 'subscription_actual_price': subscription.attr.subscription_actual_price, 'subscription_price': subscription.attr.subscription_price, @@ -89,9 +91,14 @@ def test_subscription_serializer(self, subscription_type): 'subscription_duration_value': None }, } + date_created = str(subscription.date_created).replace(' ', 'T').replace('+00:00', 'Z') + date_updated = str(subscription.date_updated).replace(' ', 'T').replace('+00:00', 'Z') expected_data = { 'id': subscription.id, 'title': subscription.title, + 'description': subscription.description, + 'date_created': date_created, + 'date_updated': date_updated, 'subscription_type': subscription_type, 'subscription_actual_price': subscription.attr.subscription_actual_price, 'subscription_price': subscription.attr.subscription_price, diff --git a/ecommerce/subscriptions/api/v2/tests/test_views.py b/ecommerce/subscriptions/api/v2/tests/test_views.py index 282d2fd026e..dd55f4d7e1b 100644 --- a/ecommerce/subscriptions/api/v2/tests/test_views.py +++ b/ecommerce/subscriptions/api/v2/tests/test_views.py @@ -22,8 +22,8 @@ def test_list(self): """ self.create_subscription(stockrecords__partner=self.site.partner) expected_keys = [ - 'id', 'title', 'subscription_type', 'subscription_actual_price', 'subscription_price', 'subscription_status', - 'display_order', 'partner_sku', 'is_course_payments_enabled' + 'id', 'title', 'date_created', 'subscription_type', 'subscription_actual_price', 'subscription_price', + 'subscription_status', 'display_order', 'partner_sku', 'is_course_payments_enabled' ] request_url = reverse('api:v2:subscriptions-list') response = self.client.get(request_url) @@ -61,6 +61,7 @@ def test_create(self): """ subscription_data = { 'title': 'Test subscription', + 'description': 'Test subscription description', 'subscription_type': LIMITED_ACCESS, 'subscription_actual_price': 100.00, 'subscription_price': 50.00, @@ -85,6 +86,7 @@ def test_update(self): subscription = self.create_subscription(stockrecords__partner=self.site.partner) subscription_data = { 'title': 'Test subscription', + 'description': 'Test subscription description', 'subscription_type': LIMITED_ACCESS, 'subscription_actual_price': 100.00, 'subscription_price': 50.00, @@ -100,6 +102,7 @@ def test_update(self): response = self.client.get(request_url) self.assertEqual(response.status_code, 200) self.assertEqual(response.data.get('title'), subscription_data.get('title')) + self.assertEqual(response.data.get('description'), subscription_data.get('description')) self.assertFalse(response.data.get('subscription_status')) def test_toggle_course_payments(self):