def user_add(request, *args, **kwargs): context = {'page': 'users'} if request.method == 'POST': form = PartnerForm(request.POST, instance=None) if form.is_valid(): with transaction.atomic(): user = User.objects.create( username=form.cleaned_data.get('username'), first_name=form.cleaned_data.get('first_name'), last_name=form.cleaned_data.get('last_name'), email=form.cleaned_data.get('email'), is_active=form.cleaned_data.get('is_active'), is_staff=form.cleaned_data.get('is_staff'), is_superuser=form.cleaned_data.get('is_staff')) passwd = random_password(True) user.set_password(passwd) user.save() partner = Partner.objects.create( user=user, organization=form.cleaned_data.get('organization'), can_upload=form.cleaned_data.get('can_upload'), upload_location=form.cleaned_data.get('upload_location'), can_validate=form.cleaned_data.get('can_validate'), validation_location=form.cleaned_data.get( 'validation_location')) messages.success( request, _("New User account “{name}” created with " "login `{username}` and password `{password}`").format( name=partner, username=partner.username, password=passwd)) email_sent, x = send_new_account_email(partner=partner, password=passwd, creator=Partner.from_user( request.user)) if email_sent: messages.info( request, _("The password has been sent to {email}").format( email=partner.email)) return redirect('users') else: # django form validation errors logger.debug("django form errors") pass else: form = PartnerForm() context.update({'form': form}) return render(request, kwargs.get('template_name', 'user_add.html'), context)
def user_passwd_reset(request, username, *args, **kwargs): partner = Partner.get_or_none(username) passwd = random_password(True) partner.user.set_password(passwd) partner.user.save() messages.success(request, _("Password for User account “{name}” " "(login `{username}`) has been reseted to `{password}`") .format(name=partner, username=partner.username, password=passwd)) email_sent, x = send_reset_password_email( partner=partner, password=passwd, creator=Partner.from_user(request.user)) if email_sent: messages.info(request, _("The password has been sent to {email}") .format(email=partner.email)) return redirect('users')
def user_add(request, *args, **kwargs): context = {'page': 'users'} if request.method == 'POST': form = PartnerForm(request.POST, instance=None) if form.is_valid(): with transaction.atomic(): user = User.objects.create( username=form.cleaned_data.get('username'), first_name=form.cleaned_data.get('first_name'), last_name=form.cleaned_data.get('last_name'), email=form.cleaned_data.get('email'), is_active=form.cleaned_data.get('is_active'), is_staff=form.cleaned_data.get('is_staff'), is_superuser=form.cleaned_data.get('is_staff')) passwd = random_password(True) user.set_password(passwd) user.save() partner = Partner.objects.create( user=user, organization=form.cleaned_data.get('organization'), can_upload=form.cleaned_data.get('can_upload'), upload_location=form.cleaned_data.get('upload_location'), can_validate=form.cleaned_data.get('can_validate'), validation_location=form.cleaned_data.get( 'validation_location') ) messages.success(request, _("New User account “{name}” created with " "login `{username}` and password `{password}`") .format(name=partner, username=partner.username, password=passwd)) email_sent, x = send_new_account_email( partner=partner, password=passwd, creator=Partner.from_user(request.user)) if email_sent: messages.info(request, _("The password has been sent to {email}") .format(email=partner.email)) return redirect('users') else: # django form validation errors logger.debug("django form errors") pass else: form = PartnerForm() context.update({'form': form}) return render(request, kwargs.get('template_name', 'user_add.html'), context)
def user_passwd_reset(request, username, *args, **kwargs): partner = Partner.get_or_none(username) passwd = random_password(True) partner.user.set_password(passwd) partner.user.save() messages.success( request, _("Password for User account “{name}” " "(login `{username}`) has been reseted to `{password}`").format( name=partner, username=partner.username, password=passwd)) email_sent, x = send_reset_password_email(partner=partner, password=passwd, creator=Partner.from_user( request.user)) if email_sent: messages.info( request, _("The password has been sent to {email}").format( email=partner.email)) return redirect('users')
def user_profile(request, username, *args, **kwargs): context = {'page': 'profile'} partner = Partner.get_or_none(username) if partner is None: raise Http404(_("Unable to find Partner with username `{username}`") .format(username=username)) context.update({'partner': partner}) return render(request, kwargs.get('template_name', 'public_profile.html'), context)
def user_edit(request, username, *args, **kwargs): context = {'page': 'users'} partner = Partner.get_or_none(username) if request.method == 'POST': form = PartnerForm(request.POST, instance=partner) if form.is_valid(): with transaction.atomic(): partner.user.first_name = form.cleaned_data.get('first_name') partner.user.last_name = form.cleaned_data.get('last_name') partner.user.email = form.cleaned_data.get('email') partner.user.is_active = form.cleaned_data.get('is_active') partner.user.is_staff = form.cleaned_data.get('is_staff') partner.user.is_superuser = \ form.cleaned_data.get('is_superuser', False) partner.user.save() partner.organization = form.cleaned_data.get('organization') partner.can_upload = form.cleaned_data.get('can_upload') partner.upload_location = \ form.cleaned_data.get('upload_location') partner.can_validate = form.cleaned_data.get('can_validate') partner.validation_location = \ form.cleaned_data.get('validation_location') partner.save() messages.success(request, _("User account “{name}” has been updated.") .format(name=partner)) return redirect('users') else: # django form validation errors logger.debug("django form errors") pass else: form = PartnerForm(instance=partner) context.update({ 'form': form, 'partner': partner}) return render(request, kwargs.get('template_name', 'user_edit.html'), context)
def user_edit(request, username, *args, **kwargs): context = {'page': 'users'} partner = Partner.get_or_none(username) if request.method == 'POST': form = PartnerForm(request.POST, instance=partner) if form.is_valid(): with transaction.atomic(): partner.user.first_name = form.cleaned_data.get('first_name') partner.user.last_name = form.cleaned_data.get('last_name') partner.user.email = form.cleaned_data.get('email') partner.user.is_active = form.cleaned_data.get('is_active') partner.user.is_staff = form.cleaned_data.get('is_staff') partner.user.is_superuser = \ form.cleaned_data.get('is_superuser', False) partner.user.save() partner.organization = form.cleaned_data.get('organization') partner.can_upload = form.cleaned_data.get('can_upload') partner.upload_location = \ form.cleaned_data.get('upload_location') partner.can_validate = form.cleaned_data.get('can_validate') partner.validation_location = \ form.cleaned_data.get('validation_location') partner.save() messages.success( request, _("User account “{name}” has been updated.").format( name=partner)) return redirect('users') else: # django form validation errors logger.debug("django form errors") pass else: form = PartnerForm(instance=partner) context.update({'form': form, 'partner': partner}) return render(request, kwargs.get('template_name', 'user_edit.html'), context)
from django.core.management.base import BaseCommand from optparse import make_option from dmd.dhis_tools import get_dhis from dmd.models.Entities import Entity from dmd.models.Periods import MonthPeriod from dmd.models.Indicators import Indicator from dmd.models.DataRecords import DataRecord from dmd.models.Partners import Partner from dmd.utils import data_ident_for, chdir_dmd DEBUG = True NB_PREVIOUS_PERIODS = 3 logger = logging.getLogger(__name__) dhisbot = Partner.get_or_none('dhisbot') class Command(BaseCommand): option_list = BaseCommand.option_list + ( make_option('-p', help="Period (month) to fetch data for", action='store', dest='period'), make_option('-u', help="Update data even if it exists", action='store_true', default=False, dest='update'), make_option(
def handle(self, *args, **options): # make sure we're at project root chdir_dmd() yesterday = datetime.date.today() - datetime.timedelta(days=1) logger.info("Sending validation feedback for {}".format(yesterday)) start = datetime.datetime(*yesterday.timetuple()[:6]) end = datetime.datetime(*yesterday.timetuple()[:3], hour=23, minute=59, second=59) dhis_bot = Partner.dhis_bot() records = DataRecord.objects \ .exclude(created_by=dhis_bot) \ .exclude(validated_by__isnull=True) \ .filter(validated_on__gte=start, validated_on__lte=end) def summary_for(partner): pqs = records.filter(created_by=partner) return { 'partner': partner, 'nb_validations': pqs.count(), 'status': { s['validation_status']: { 'name': text_type( DataRecord.VALIDATION_STATUSES.get( s['validation_status'])), 'count': pqs.filter( validation_status=s['validation_status']).count(), 'all': pqs.filter(validation_status=s['validation_status']) } for s in pqs.values('validation_status') } } feedbacks = [ summary_for(Partner.objects.get(id=pid)) for pid in set( [r['created_by'] for r in records.values('created_by')]) if pid ] for ptnf in feedbacks: partner = ptnf['partner'] if not partner.email: continue ptnf.update({'yesterday': yesterday}) email_sent, x = send_validation_feedback_email(partner=partner, summary=ptnf) if email_sent: logger.info("Sent feedback to {}".format(partner)) else: logger.error("Unable to send feedback to {}".format(partner)) logger.info("done.")
def auto_validate(self, on): self.record_validation(status=self.AUTO_VALIDATED, on=on, by=Partner.validation_bot())
def auto_validated(self): return self.validated_by == Partner.validation_bot()
from django.core.management.base import BaseCommand from optparse import make_option from dmd.dhis_tools import get_dhis from dmd.models.Entities import Entity from dmd.models.Periods import MonthPeriod from dmd.models.Indicators import Indicator from dmd.models.DataRecords import DataRecord from dmd.models.Partners import Partner from dmd.utils import data_ident_for, chdir_dmd DEBUG = True NB_PREVIOUS_PERIODS = 3 logger = logging.getLogger(__name__) dhisbot = Partner.get_or_none('dhisbot') class Command(BaseCommand): option_list = BaseCommand.option_list + ( make_option('-p', help="Period (month) to fetch data for", action='store', dest='period'), make_option('-u', help="Update data even if it exists", action='store_true', default=False, dest='update'), make_option('-i',