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()
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}
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()
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()
def list(request): section = "admin" all_imports = DataImport.objects_by_account(request.account).all() return locals()