Skip to content
This repository was archived by the owner on Nov 15, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions lms/djangoapps/onboarding/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
Organization,
UserExtendedProfile,
FunctionArea,
OrganizationPartner,
OrganizationMetric
)


Expand Down Expand Up @@ -41,7 +43,7 @@ class TotalEmployeeAdmin(BaseDropdownOrderAdmin):


class PartnerNetworkAdmin(BaseDropdownOrderAdmin):
pass
list_display = ('order', 'code', 'label', 'is_partner_affiliated')


class EducationLevelAdmin(BaseDropdownOrderAdmin):
Expand All @@ -60,14 +62,25 @@ class CurrencyAdmin(admin.ModelAdmin):
list_display = ('country', 'name', 'alphabetic_code', )


class OraganizationAdmin(admin.ModelAdmin):
class OrganizationMetricAdmin(admin.ModelAdmin):
list_display = ('org', 'user', 'submission_date', 'actual_data', 'effective_date', 'total_clients',
'total_employees', 'local_currency', 'total_revenue', 'total_donations', 'total_expenses',
'total_program_expenses')


class OrganizationAdmin(admin.ModelAdmin):
list_display = ('label', 'admin', 'country', 'unclaimed_org_admin_email', 'founding_year', )


class UserExtendedProfileAdmin(admin.ModelAdmin):
list_display = ('user', 'organization', 'country_of_employment', 'role_in_org', 'hours_per_week', )


class OrganizationPartnerAdmin(admin.ModelAdmin):
list_display = ('organization', 'partner', 'start_date', 'end_date',)
list_filter = ('organization', 'partner', 'start_date', 'end_date',)


admin.site.register(Currency, CurrencyAdmin)
admin.site.register(RoleInsideOrg, RoleInsideOrgAdmin)
admin.site.register(OrgSector, OrgSectorAdmin)
Expand All @@ -77,6 +90,8 @@ class UserExtendedProfileAdmin(admin.ModelAdmin):
admin.site.register(PartnerNetwork, PartnerNetworkAdmin)
admin.site.register(EducationLevel, EnglishProficiencyAdmin)
admin.site.register(EnglishProficiency, EnglishProficiencyAdmin)
admin.site.register(Organization, OraganizationAdmin)
admin.site.register(Organization, OrganizationAdmin)
admin.site.register(UserExtendedProfile, UserExtendedProfileAdmin)
admin.site.register(FunctionArea, FunctionAreaAdmin)
admin.site.register(OrganizationPartner, OrganizationPartnerAdmin)
admin.site.register(OrganizationMetric, OrganizationMetricAdmin)
1 change: 1 addition & 0 deletions lms/djangoapps/onboarding/constants.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
ACTIVATION_ERROR = 'Your account has not been activated. Please check your email to activate your account.'
ORG_PARTNERSHIP_END_DATE_PLACEHOLDER = '3000-01-01'
7 changes: 4 additions & 3 deletions lms/djangoapps/onboarding/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -500,9 +500,10 @@ def save(self, request, commit=True):
organization.save()

partners = request.POST.getlist('partner_networks')
removed_partners = request.POST.get('removed_org_partners', '').split(",")

if partners:
OrganizationPartner.update_organization_partners(organization, partners)
if partners or removed_partners:
OrganizationPartner.update_organization_partners(organization, partners, removed_partners)


class RegModelForm(BaseOnboardingModelForm):
Expand Down Expand Up @@ -1140,7 +1141,7 @@ def clean_total_program_expenses(self):

def save(self, request):
user_extended_profile = request.user.extended_profile

self.instance.pk = None
org_detail = super(OrganizationMetricModelForm, self).save(commit=False)
org_detail.user = request.user
org_detail.org = user_extended_profile.organization
Expand Down
36 changes: 31 additions & 5 deletions lms/djangoapps/onboarding/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
import uuid

import re
from dateutil.relativedelta import relativedelta

from pytz import utc

from constants import ORG_PARTNERSHIP_END_DATE_PLACEHOLDER
from datetime import datetime
from django.contrib.auth.models import User
from simple_history import register
Expand Down Expand Up @@ -205,6 +208,10 @@ def admin_info(self):
"""
return "%s" % self.admin.email if self.admin else "Administrator not assigned yet."

def get_active_partners(self):
""" Return list of active organization partners"""
return self.organization_partners.filter(end_date__gt=datetime.utcnow().date()).values_list('partner', flat=True)

def __str__(self):
return self.label

Expand All @@ -219,18 +226,37 @@ class OrganizationPartner(models.Model):
end_date = models.DateTimeField()

@classmethod
def update_organization_partners(cls, organization, partners):
def update_organization_partners(cls, organization, partners, removed_partners):
"""
Add/Update partners data or an organization
"""
cls.objects.filter(organization=organization).delete()

_partners = PartnerNetwork.objects.filter(code__in=partners)
# Set unchecked partners end date to today
cls.objects.filter(organization=organization,
partner__in=removed_partners, end_date__gt=datetime.utcnow().date()).update(
end_date=datetime.now(utc).date())

# Mark removed partner affliation flag to False if not selected in any organization
_removed_partners = PartnerNetwork.objects.filter(code__in=removed_partners)
for partner in _removed_partners:
p = cls.objects.filter(partner=partner.code).first()
if not p:
partner.is_partner_affiliated = False
partner.save()

# Get already added partners for an organization
no_updated_selections = cls.objects.filter(organization=organization,
partner__in=partners, end_date__gt=datetime.utcnow().date()).values_list('partner', flat=True)

# Filter out new/reselected Partners
new_selections = [p for p in partners if p not in no_updated_selections]
_partners = PartnerNetwork.objects.filter(code__in=new_selections)

# Add new/reselected Partners and mark network as affiliated
lst_to_create = []
for partner in _partners:
start_date = datetime.now()
end_date = start_date + relativedelta(years=100)
end_date = ORG_PARTNERSHIP_END_DATE_PLACEHOLDER
obj = cls(organization=organization, partner=partner.code, start_date=start_date, end_date=end_date)
lst_to_create.append(obj)

Expand Down
8 changes: 4 additions & 4 deletions lms/djangoapps/onboarding/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ def organization(request):
initial = {
'country': COUNTRIES.get(_organization.country),
'is_org_url_exist': '1' if _organization.url else '0',
'partner_networks': _organization.organization_partners.values_list('partner', flat=True),
'partner_networks': _organization.get_active_partners(),
}

if request.method == 'POST':
Expand Down Expand Up @@ -305,9 +305,7 @@ def get_country_names(request):
def org_detail_survey(request):
user_extended_profile = request.user.extended_profile
are_forms_complete = not(bool(user_extended_profile.unattended_surveys(_type='list')))

latest_survey = OrganizationMetric.objects.filter(org=user_extended_profile.organization,
user=request.user).last()
latest_survey = OrganizationMetric.objects.filter(org=user_extended_profile.organization).last()

initial = {
'actual_data': '1' if latest_survey and latest_survey.actual_data else '0',
Expand Down Expand Up @@ -393,6 +391,8 @@ def update_account_settings(request):
if not are_forms_complete :
return redirect(reverse('organization'))

return redirect(reverse('update_account_settings'))

else:
form = forms.UpdateRegModelForm(
instance=user_extended_profile,
Expand Down
4 changes: 3 additions & 1 deletion lms/djangoapps/philu_api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
"""
from django.conf.urls import url, patterns

from lms.djangoapps.philu_api.views import PlatformSyncService, get_user_chat, mark_user_chat_read
from lms.djangoapps.philu_api.views import PlatformSyncService, \
get_user_chat, mark_user_chat_read, get_user_data

urlpatterns = patterns(
'philu_api.views',
url(r'platform/sync/service/', PlatformSyncService.as_view(), name='get_shared_data'),
url(r'profile/update/', PlatformSyncService.as_view(), name='update_community_profile_update'),
url(r'profile/chats/?$', get_user_chat, name='get_user_chat'),
url(r'profile/data/?$', get_user_data, name='get_user_data'),
url(r'profile/chats/mark/?$', mark_user_chat_read, name='mark_user_chat_read'),
)
12 changes: 11 additions & 1 deletion lms/djangoapps/philu_api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def post(self, request):

username = request.GET.get("username")
email = request.GET.get("email")

try:
user = User.objects.get(email=email)
except User.DoesNotExist:
Expand Down Expand Up @@ -117,3 +117,13 @@ def mark_user_chat_read(request):
data={'_uid': 1, 'username': username},
headers=headers)
return JsonResponse(response.json())

def get_user_data(request):
""" Get the user profile data from NodeBB for current user """
data_endpoint = settings.NODEBB_ENDPOINT + '/api/v2/users/data'
username = request.user.username
headers = {'Authorization': 'Bearer ' + settings.NODEBB_MASTER_TOKEN}
response = requests.post(data_endpoint,
data={'_uid': 1, 'username': username},
headers=headers)
return JsonResponse(response.json())
2 changes: 1 addition & 1 deletion lms/djangoapps/teams/static/teams/js/views/team_card.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@
if (this.memberships > 1) {
this.$el.html(this.template({roomID: this.roomID, teamID: this.teamID, nodeBBUrl: this.nodeBBUrl}));
} else {
this.$el.html('<p class="meta-detail team-group">You can not start discussion until more members join this team.<p>');
this.$el.html('<p class="meta-detail team-group">You can not start discussion until more members join this team.</p>');
}
}
});
Expand Down
32 changes: 23 additions & 9 deletions lms/djangoapps/teams/static/teams/js/views/team_profile.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
(function(define) {
'use strict';
define([
'jquery',
'backbone',
'underscore',
'gettext',
Expand All @@ -14,7 +15,7 @@
'text!teams/templates/team-profile.underscore',
'text!teams/templates/team-member.underscore'
],
function(Backbone, _, gettext, HtmlUtils, TeamDiscussionView, ViewUtils, TeamUtils,
function($, Backbone, _, gettext, HtmlUtils, TeamDiscussionView, ViewUtils, TeamUtils,
teamTemplate, teamMemberTemplate) {
var TeamProfileView = Backbone.View.extend({

Expand Down Expand Up @@ -81,14 +82,27 @@
renderTeamMembers: function() {
var view = this;
_.each(this.model.get('membership'), function(membership) {
HtmlUtils.append(
view.$('.members-info'),
HtmlUtils.template(teamMemberTemplate)({
imageUrl: membership.user.profile_image.image_url_medium,
username: membership.user.username,
memberProfileUrl: '/u/' + membership.user.username
})
);
$.post({
url: '/philu/api/profile/data',
data: {
username: membership.user.username
},
success: function(data) {
HtmlUtils.append(
view.$('.members-info'),
HtmlUtils.template(teamMemberTemplate)({
imageUrl: data.payload.picture !== "" ?
data.payload.picture :
membership.user.profile_image.image_url_medium,
username: membership.user.username,
memberProfileUrl: data.payload.profileUrl
})
);
},
error: function(err) {
console.error("Error: " + err)
}
});
});
},

Expand Down