예제 #1
0
파일: tasks.py 프로젝트: skoczen/mycelium
def queue_data_import(acct_id, import_record):
    account = Account.objects.using("default").get(pk=acct_id)
    r = DataImport.raw_objects.using("default").get(pk=import_record.pk)

    # print "Starting data import for %s" % import_record

    try:

        # Grab the spreadsheet, parse it, prep for import.
        fh = default_storage.open(r.source_filename, 'r')
        s = SpreadsheetAbstraction(account, fh, r.import_type, filename=r.source_filename, cache_key_pct_complete=DataImport.cache_key_for_import_id_percent_imported(r.pk))
        r.num_source_rows = s.num_rows
        r.save()
        
        # invalidate johnny cache
        # jcache.invalidate(DataImport)

        # print "Parsing complete. Starting import.."

        # Do the import
        results = s.do_import(fields=r.fields)
        cache.set(DataImport.cache_key_for_import_id_percent_imported(r.pk),99)
        # print "Done, saving results."

        # Save the results
        for row in results:
            model_key = [v.model_key for k,v in s.import_row_class.fields.items()][0]
            ResultsRow.objects.using("default").create(
                account=account,
                data_import=r,
                successfully_imported=row["success"],
                new_record_created=row["created"],
                targets=row["targets"],
                primary_target_id=row["targets"][model_key].id,  # TODO: this breaks when we go to multiple models
            )

        r.finish_time = datetime.datetime.now()
        cache.delete(DataImport.cache_key_for_import_id_percent_imported(r.pk))
        r.save()


        # for m in r.import_row_class_instance.get_target_models():
        #     jcache.invalidate(m)
        # print "Results saved."
    except:
        r.failed = True
        r.save()
예제 #2
0
파일: views.py 프로젝트: skoczen/mycelium
def import_status(request):
    try:
        import_id = request.POST["import_id"]
        percent_imported = "%s" % DataImport.percent_imported_for_import_id(import_id)
        return {
            'success':True,
            'percent_imported': percent_imported,
            'is_finished': percent_imported == "100",
            'import_id':import_id,
        }

    except Exception, e:
        print e
        return {'success': False}
예제 #3
0
파일: models.py 프로젝트: skoczen/mycelium
    def check_challenge_progress(self):
        """This function checks each uncompleted challenge to see if it's been done,
           and updates the boolean fields as needed"""

        if not self.has_completed_all_challenges:
            from generic_tags.models import Tag
            from groups.models import Group
            from donors.models import Donation
            from volunteers.models import CompletedShift
            from data_import.models import DataImport
            from spreadsheets.models import Spreadsheet

            if not self.challenge_has_imported_contacts:
                if DataImport.objects_by_account(self).count() > 0:
                    self.challenge_has_imported_contacts = True

            if not self.challenge_has_set_up_tags:
                # One non-standard tag.
                if Tag.objects_by_account(self).count() > 0:
                    self.challenge_has_set_up_tags = True
                                
            if not self.challenge_has_added_board:
                # created a tag that contains "board"
                if Tag.objects_by_account(self).filter(name__icontains="board").count() > 0:
                    
                    # and, created a board group with at least one rule on tag
                    if Group.objects_by_account(self).filter(name__icontains="board").count() > 0:
                        for g in Group.objects_by_account(self).all():
                            for r in g.rules.all():
                                if r.is_valid and "board" in r.cleaned_right_side_value.lower():
                                    self.challenge_has_added_board = True


            if not self.challenge_has_created_other_accounts:
                if self.useraccount_set.all().count() > 1:
                    self.challenge_has_created_other_accounts = True

            if not self.challenge_has_downloaded_spreadsheet:
                if Spreadsheet.objects_by_account(self).count() > 0:
                    self.challenge_has_downloaded_spreadsheet = True

            if not self.challenge_has_submitted_support:
                pass
            
            if not self.challenge_has_added_a_donation:
                if Donation.objects_by_account(self).count() > 0:
                    self.challenge_has_added_a_donation = True
                
            if not self.challenge_has_logged_volunteer_hours:
                if CompletedShift.objects_by_account(self).count() > 0:
                    self.challenge_has_logged_volunteer_hours = True

            if not self.has_completed_all_challenges:
                # self.challenge_has_submitted_support and \
                if self.challenge_has_imported_contacts and self.challenge_has_set_up_tags and\
                    self.challenge_has_added_board and self.challenge_has_created_other_accounts and\
                    self.challenge_has_downloaded_spreadsheet and \
                    self.challenge_has_added_a_donation and self.challenge_has_logged_volunteer_hours:

                    if not self.has_completed_all_challenges and self.free_trial_ends_date and self.free_trial_ends_date.date() >= datetime.date.today():

                        self.free_trial_ends_date = self.signup_date + datetime.timedelta(days=44)
                        
                        # TODO: When stripe updates their API, move to this.
                        # sub = self.stripe_subscription
                        # sub.trial_end = self.free_trial_ends_date
                        # sub.save()

                        c = self.stripe_customer
                        c.update_subscription(plan=MONTHLY_PLAN_NAME, trial_end=self.free_trial_ends_date)

                    self.has_completed_all_challenges = True
                    


            if not self.has_completed_any_challenges:
                #  self.challenge_has_submitted_support or\
                if self.challenge_has_imported_contacts or self.challenge_has_set_up_tags or\
                    self.challenge_has_added_board or self.challenge_has_created_other_accounts or\
                    self.challenge_has_downloaded_spreadsheet or\
                    self.challenge_has_added_a_donation or self.challenge_has_logged_volunteer_hours:

                    self.has_completed_any_challenges = True

            self.save()
예제 #4
0
파일: views.py 프로젝트: skoczen/mycelium
def review(request, import_id):
    # TODO: this is obnoxious.  Fix it.
    section = "admin"
    data_import = DataImport.objects_by_account(request.account).get(pk=import_id)
    return locals()
예제 #5
0
파일: views.py 프로젝트: skoczen/mycelium
def list(request):
    section = "admin"
    all_imports = DataImport.objects_by_account(request.account).all()
    return locals()