Example #1
0
def createBulkMail(transaction, creatorMember, balanceBefore, balanceNow, lang):
    debtorsTxt = ''
    debtorsHtml = '<ul>'
    item = _('$%s to %s because of %s', lang)
    itemTxt = ' * %s\n' % item
    itemHtml = '<li>%s</li>' % item
    
    total = 0.0
    
    for debt in transaction.debts:
    	if transaction.payer.user != debt.member.user:
	        debtorsTxt += itemTxt % (round(debt.money, 2), debt.member.userNick, debt.reason)
	        debtorsHtml += itemHtml % (round(debt.money, 2), debt.member.userNick, debt.reason)
	        total += debt.money
        
    debtorsHtml += '</ul>'
    
    # Try send email to the debtor
    message = mail.EmailMessage(
                    sender = DeBeeEmail,
                    to = transaction.payer.user.email(), 
                    subject = transactionNoticeSubject(transaction.payer, lang))
    
    global bulkTxt
    if not (lang in bulkTxt):
        bulkTxt[lang] = readFile('texts/%s/creator_says_you_payed_for_them.txt' % lang)
        
    global bulkHtml
    if not (lang in bulkHtml):
        bulkHtml[lang] = readFile('texts/%s/creator_says_you_payed_for_them.html' % lang)  
    
    message.body = bulkTxt[lang] % (transaction.payer.userNick, creatorMember.userNick, debtorsTxt, round(total, 2), descriptionOfBalance(balanceBefore, True, lang), transaction.payer.groupNick, descriptionOfBalance(balanceNow, False, lang))
    message.html = bulkHtml[lang] % (transaction.payer.userNick, creatorMember.userNick, debtorsHtml, round(total, 2), descriptionOfBalanceHtml(balanceBefore, True, lang), transaction.payer.groupNick, descriptionOfBalanceHtml(balanceNow, False, lang))
    return message
Example #2
0
    def __init__(self, config):
        # keep a reference to the config
        self.config = config

        # validate corpus path exists
        if os.path.exists(config.corpusPath) == False:
            io.printErrorAndExit("corpus not found at {}".format(
                config.corpusPath))

        # validate that students.txt exists, create array
        studentText = io.readFile(config.corpusPath + "students.txt")
        self.students = []
        studentText = studentText.strip().split("\n")
        for student in studentText:
            self.students.append(student.strip())

        # try to load the semester map
        self.hasSemesters = False
        self.semesterMap = {}
        if os.path.exists(config.corpusPath + "semesters.csv"):
            handle = open(config.corpusPath + "semesters.csv", "r")
            reader = csv.reader(handle)
            for row in reader:
                self.semesterMap[row[0]] = row[1].strip()
            self.hasSemesters = True
Example #3
0
def thirdPartyActionMessageHtml(creator, me, someone, amount, reason, balanceBefore, balanceNow, rejectUrl, body, lang):
    realBody = body % {'creator': creator.userNick, 'user': me.userNick, 'amount': amount, 'reason': reason}
    
    global actionHtml
    if not (lang in actionHtml):
        actionHtml[lang] = readFile('texts/%s/action.html' % lang)
        
    return actionHtml[lang] % (someone.userNick, realBody, descriptionOfBalanceHtml(balanceBefore, True, lang), someone.groupNick, descriptionOfBalanceHtml(balanceNow, False, lang), rejectUrl)
Example #4
0
def _initializeLanguageData(language):
    global languageData
    
    props = {}
    lines = readFile('locale/%s.properties' % language).split('\n')
    for line in lines:
        [key, value] = line.split(':=', 1)
        props[key] = value.strip()
    languageData[language] = props
Example #5
0
def actionMessageTxt(me, someone, amount, reason, balanceBefore, balanceNow, rejectUrl, body, lang):
    realBody = body % {'user': me.userNick, 'amount': amount, 'reason': reason}
    
    global actionTxt
    if not (lang in actionTxt):
        actionTxt[lang] = readFile('texts/%s/action.txt' % lang)
    
    return actionTxt[lang] % (someone.userNick, realBody, 
                              descriptionOfBalance(balanceBefore, True, lang), someone.groupNick, 
                              descriptionOfBalance(balanceNow, False, lang), rejectUrl)
Example #6
0
def rejectionMessageHtml(me, someone, tr, reason, balanceBefore, balanceNow, body, lang):
    if reason != "":
        reason = '%s<br><br>' % reason
    
    realBody = body % {'user': me.userNick, 'amount': tr.amount, 'reason': tr.reason}
    
    global rejectionHtml
    if not (lang in rejectionHtml):
        rejectionHtml[lang] = readFile('texts/%s/rejection.html' % lang)
        
    return rejectionHtml[lang] % (someone.userNick, realBody, reason, descriptionOfBalanceHtml(balanceBefore, True, lang), someone.groupNick, descriptionOfBalanceHtml(balanceNow, False, lang))
Example #7
0
def rejectionMessageTxt(me, someone, tr, reason, balanceBefore, balanceNow, body, lang):
    if reason != "":
        reason = '\n%s\n' % reason
    
    realBody = body % {'user': me.userNick, 'amount': tr.amount, 'reason': tr.reason}
    
    global rejectionTxt
    if not (lang in rejectionTxt):
        rejectionTxt[lang] = readFile('texts/%s/rejection.txt' % lang)
        
    return rejectionTxt[lang] % (someone.userNick, realBody, reason, descriptionOfBalance(balanceBefore, True, lang), someone.groupNick, descriptionOfBalance(balanceNow, False, lang))
Example #8
0
 def sendInvitation(self, fromUser, toEmail, toGroup, customInvitationText, urlBuilder, lang):
     invitation = GroupInvitation(toGroup, toEmail, urlBuilder)
     plainUrl = invitation.getUrl()
     subject = "De-Bee: You are invited to %s group!" % toGroup.name
     
     message = mail.EmailMessage(
                     sender = DeBeeEmail, 
                     to = toEmail, 
                     subject = subject)
     
     if len(customInvitationText) > 0:
         plainInvitationText = customInvitationText + '\n\n'
         htmlInvitationText = customInvitationText + '<br><br>'
     else:
         plainInvitationText = ''
         htmlInvitationText = ''
     
     invitationText = readFile('texts/%s/invitation.txt' % lang)
     invitationHtml = readFile('texts/%s/invitation.html' % lang)
     
     membersText = ''
     membersHtml = '<ul>'
     
     for member in toGroup.memberships:
         if member.userNick != member.user.email():
             membersText += ' * %s (%s)\n' % (member.userNick, member.user.email())
             membersHtml += '<li>%s (%s)</li>' % (member.userNick, member.user.email())
         else:
             membersText += ' * %s\n' % member.userNick
             membersHtml += '<li>%s</li>' % member.userNick
             
     membersHtml += '</ul>'
     
     message.body = invitationText % (toEmail, fromUser, toGroup.name, plainInvitationText, membersText, plainUrl)
     message.html = invitationHtml % (toEmail, fromUser, toGroup.name, htmlInvitationText, membersHtml, plainUrl)
     
     try:
         message.send()
     except:
         iHateGoogleAppEngineMailQuotaRules = True
Example #9
0
	def __init__(self, config):
		# keep a reference to the config
		self.config = config
		
		# validate corpus path exists
		if os.path.exists(config.corpusPath) == False:
			io.printErrorAndExit("corpus not found at {}".format(config.corpusPath))
		
		# validate that students.txt exists, create array
		studentText = io.readFile(config.corpusPath + "students.txt")
		self.students = []
		studentText = studentText.strip().split("\n")
		for student in studentText:
			self.students.append(student.strip())

		# try to load the semester map
		self.hasSemesters = False
		self.semesterMap = {}
		if os.path.exists(config.corpusPath + "semesters.csv"):
			handle = open(config.corpusPath + "semesters.csv", "r")
			reader = csv.reader(handle)
			for row in reader:
				self.semesterMap[row[0]] = row[1].strip()
			self.hasSemesters = True
Example #10
0
 def readFromPostprocessed(self, assignment, filename):
     path = self.config.corpusPath + '__algae__/postprocessed/' + assignment + '/' + filename
     if os.path.exists(path):
         return io.readFile(path)
     else:
         return None
Example #11
0
 def readFromAssignment(self, student, assignment, filename):
     path = self.config.corpusPath + student + '/' + assignment + '/' + filename
     if os.path.exists(path):
         return io.readFile(path)
     else:
         return None
Example #12
0
def createCowMail(creatorMember, transaction, result, toMember, balanceBefore, balanceNow, lang):
    message = mail.EmailMessage(
                    sender = DeBeeEmail,
                    to = toMember.user.email(),
                    subject = transactionNoticeSubject(toMember, lang))
    
    global cowTxt
    if not (lang in cowTxt):
        cowTxt[lang] = readFile('texts/%s/cow.txt' % lang)
        
    global cowHtml
    if not (lang in cowHtml):
        cowHtml[lang] = readFile('texts/%s/cow.html' % lang)
        
    otherMembers = []
    for member, balance in result.balanceChange.iteritems():
         if member.user != toMember.user:
             otherMembers.append(member)
             
    others = ''
    i = 0
    for member in otherMembers:
        if i == len(otherMembers) - 1:
            others += ' '
            others += _('and', lang)
            others += ' '
        elif i != 0:
            others += ', '        
        others += member.userNick
        i = i + 1
    
    contributorsTxt = ''
    contributorsHtml = '<ul>'
    
    for col in transaction.collaborations:
        if col.money > 0:
            if col.member.user == toMember.user:
                mem = _('You', lang)
            else:
                mem = col.member.userNick
            contributorsTxt += ' * %s: $%s\n' % (mem, round(col.money, 2))
            contributorsHtml += '<li>%s: $%s</li>' % (mem, round(col.money, 2))
            
    contributorsHtml += '</ul>'
            
    decisionTxt = ''
    decisionHtml = '<ul>'
            
    for debt in result.debts:
        i = 0
        msg = ''
        for singleDebt in debt.singleDebts:
            tuple = { 'from': debt.fromMember.userNick, 'to': singleDebt.toMember.userNick, 'amount': round(singleDebt.money, 2) }
            if i == 0:
                if debt.fromMember.user == toMember.user:
                    msg += _('You owe %(to)s $%(amount)s', lang) % tuple
                elif singleDebt.toMember.user == toMember.user:
                    msg += _('%(from)s owes you $%(amount)s', lang) % tuple
                else:
                    msg += _('%(from)s owes %(to)s $%(amount)s', lang) % tuple
            elif i < len(debt.singleDebts) - 1:
                msg += ', '
                if singleDebt.toMember.user == toMember.user:
                    msg += _('you $%(amount)s', lang) % tuple
                else:
                    msg += _('%(to)s $%(amount)s', lang) % tuple
            else:
                msg += ' '
                msg += _('and', lang)
                msg += ' '
                if singleDebt.toMember.user == toMember.user:
                    msg += _('you $%(amount)s', lang) % tuple
                else:
                    msg += _('%(to)s $%(amount)s', lang) % tuple
            i = i + 1
        decisionTxt += ' * %s\n' % msg
        decisionHtml += '<li>%s</li>' % msg
        
    decisionHtml += '</ul>'
        
    message.body = cowTxt[lang] % (toMember.userNick, creatorMember.userNick, transaction.reason, others, round(result.total, 2), round(result.each, 2), contributorsTxt, decisionTxt, descriptionOfBalance(balanceBefore, True, lang), toMember.groupNick, descriptionOfBalance(balanceNow, False, lang))
    message.html = cowHtml[lang] % (toMember.userNick, creatorMember.userNick, transaction.reason, others, round(result.total, 2), round(result.each, 2), contributorsHtml, decisionHtml, descriptionOfBalanceHtml(balanceBefore, True, lang), toMember.groupNick, descriptionOfBalanceHtml(balanceNow, False, lang))    
    return message
Example #13
0
 def readFromPreprocessed(self, student, assignment, filename):
     path = self.config.corpusPath + assignment + '/' + student + '/__algae__/' + filename
     if os.path.exists(path):
         return io.readFile(path)
     else:
         return None
Example #14
0
	def readFromPostprocessed(self, assignment, filename):
		path = self.config.corpusPath + '__algae__/postprocessed/' + assignment + '/' + filename
		if os.path.exists(path):
			return io.readFile(path)
		else:
			return None
Example #15
0
	def readFromAssignment(self, student, assignment, filename):
		path = self.config.corpusPath + student + '/' + assignment + '/' + filename
		if os.path.exists(path):
			return io.readFile(path)
		else:
			return None