예제 #1
0
class Donor():

    name = String()
    donations = List()

    def __init__(self, name, donations=[]):
        self.name = name
        self.donations = []
        for donation in donations:
            self.donations.append(donation)

    def new_donation(self, amount):
        self.donations.append(amount)

    def write_note(self, current_donation=0):
        note = [
            "Dear {},\n".format(self.name),
            '\nThank you for your generous donations \
totaling ${:,}.'.format(self.total_donated),
            "\nThe money will be put to good use."
            "\n\nSincerely, \n                -The Team"
        ]
        if current_donation > 0:
            curr = ("This donation of ${:,} "
                    "really helps.".format(current_donation))
            note.insert(2, curr)
        return "".join(note)

    @property
    def total_donated(self):
        return sum(self.donations)

    @property
    def number_of_donations(self):
        return len(self.donations)

    @property
    def average_donation(self):
        return sum(self.donations) / len(self.donations)

    def __str__(self):
        return "{:17} ${:14,.2f}{:13} ${:13,.2f}".format\
            (self.name, self.total_donated, self.number_of_donations,
                self.average_donation)

    def __repr__(self):
        return "Donor(\'{}\', {})".format(self.name, self.donations)

    def __lt__(self, other):
        return self.total_donated < other.total_donated

    def __gt__(self, other):
        return self.total_donated > other.total_donated

    def __eq__(self, other):
        return self.total_donated == other.total_donated

    def __ne__(self, other):
        return self.total_donated != other.total_donated
예제 #2
0
class Donor():

    name = String()
    donations = List()

    def __init__(self, name, donations=[]):
        self.name = name
        self.donations = []
        for donation in donations:
            self.donations.append(donation)

    def new_donation(self, amount):
        self.donations.append(amount)

    def write_note(self, curr_donation=0):
        note = [
            "Dear {},\n".format(self.name),
            "\nThank you for your generosity to our cause.\n",
            "You have now given a total of ${:,}.".format(self.tot_given),
            "\nWe greatly appreciate your contributions!"
            "\n\nThank you!\nAlex Laws"
        ]
        if curr_donation > 0:
            curr = ("Your recent gift of ${:,} "
                    "is very helpful. ".format(curr_donation))
            note.insert(2, curr)
        return "".join(note)

    @property
    def tot_given(self):
        return sum(self.donations)

    @property
    def num_donations(self):
        return len(self.donations)

    @property
    def avg_donation(self):
        return sum(self.donations) / len(self.donations)

    def __str__(self):
        return "{:17} ${:14,.2f} {:13} ${:13,.2f}".format(
            self.name, self.tot_given, self.num_donations, self.avg_donation)

    def __repr__(self):
        return "Donor(\'{}\', {})".format(self.name, self.donations)

    def __lt__(self, other):
        return self.tot_given < other.tot_given

    def __gt__(self, other):
        return self.tot_given > other.tot_given

    def __eq__(self, other):
        return self.tot_given == other.tot_given

    def __ne__(self, other):
        return self.tot_given != other.tot_given
예제 #3
0
class Donor:
    _name = String()
    _donations = List()
    _total_donations = Float()
    """
    An individual donor, consisting of a name, a list of donations and a set of properties for commonly used attributes
    including total donations, average donations, and number of donations
    """
    def __init__(self, name, donations=None):
        self._name = name
        if donations is None:
            self._donations = []
        else:
            self._donations = donations
        self._total_donations = 0
        for donation in self._donations:
            self._total_donations += donation

    @property
    def total_donations(self):
        return self._total_donations

    @property
    def name(self):
        return self._name

    @property
    def avg_donation(self):
        return self._total_donations / self.num_donations

    @property
    def num_donations(self):
        return len(self._donations)

    def add_donation(self, donation):
        """
        Add a new donation entry for this donor
        :param donation: the new donation amount
        """
        self._donations.append(donation)
        self._total_donations += donation

    def create_thank_you(self, donation):
        """
        Prints a thank for you the given donor and amount
        :param donation: dictionary containing name of the donor to thank and the amount donated
        :returns: formatted thank you string
        """
        return f"Dear {self.name},\nThank you for your very generous donation of ${donation:.2f}.  It \nwill go very far in supporting the Human Fund, \"Money for \nPeople.\"\n{'Sincerely':>40}\n{'Art Vandelay':>50}"

    def __lt__(self, other):
        return self.total_donations < other.total_donations

    def __eq__(self, other):
        return self.name == other.name and self._donations == other._donations
예제 #4
0
class Donor:
    _name = String()
    _donations = List()
    _total_donations = Float()

    def __init__(self, name, donations=None):
        if ' ' in name:
            self._first, self._last = name.split(' ')
        else:
            self._first = ''
            self._last = name
        self._name = name
        if donations:
            self._donations = donations
        else:
            self._donations = []

    @property
    def name(self):
        return self._name

    @property
    def first_name(self):
        return self._first

    @property
    def last_name(self):
        return self._last

    @property
    def donations(self):
        return self._donations

    @property
    def full_name(self):
        return f"{self._first} {self._last}"

    def __str__(self):
        return f"{self._first} {self._last} {self._donations}"

    def __repr__(self):
        return f'Donor(\'{str(self._name)}\', {self._donations})'

    def add_donations(self, amount):
        return self._donations.append(amount)

    @property
    def total_donations(self):
        return sum(self._donations)

    @property
    def len_donations(self):
        return len(self._donations)

    @property
    def avg_donations(self):
        try:
            return self.total_donations / self.len_donations
        except ValueError:
            return self._donations

    def letter(self, amount):
        txt = """\n
            To:       {0:s}
            Subject:  Your donation of ${1:,.2f}
            Dear {0:s},\n

            Thank you for your donation of ${1:,.2f}.\n
            """
        print(txt.format(self._name, amount))
예제 #5
0
class Donor:
    _name = String()
    _donations = List()
    
    """
    Defines a single donor with their individual donation information
    """
    def __init__(self, name, donations=None):
        self._name = name
        if donations is None:
            self._donations = []
        else:
            self._donations = donations
            
    @property
    def name(self):
        """
        Get donor name
        """
        return self._name
        
    def donate(self, amt):
        """
        Record a new donation for this donor
        """
        self._donations.append(amt)
        
    @property
    def donations(self):
        """
        Return list the donations for this donor
        """
        return self._donations
        
    @property
    def num_donations(self):
        """
        Return the number of donations for this donor
        """
        return len(self._donations)
        
    @property
    def total_donations(self):
        """
        Return the total donations for this donor
        """
        total = 0;
        for donation in self._donations:
            total += donation
        return total
    
    @property
    def avg_donation(self):
        """
        Return the average donation for this donor
        """
        return self.total_donations / self.num_donations
 
 
    def __lt__(self, other):
        """
        Less-than comparator for this donor's total donations to anothers
        """
        return self.total_donations < other.total_donations
        
    def __eq__(self, other):
        """
        Equality comparator for this donor's total donations to another
        """
        return self.total_donations == other.total_donations
예제 #6
0
class EachDonor:
    """
    Individual donor field behaviors
    """
    name = String()
    each_donation = List()

    def __init__(self, name, each_donation):
        """
        Initialize instance objects
        :param name: name object for individual donors
        :param each_donation: individual donations (to be added to list)
        """
        self.name = name
        self.each_donation = []
        for new_donation in each_donation:
            self.each_donation.append(new_donation)

    def new_donation(self, amnt):
        """
        Donation adder() function -- allows user to enter
        new donation amount(s) for a specific donor.
        :param amnt: donation amount (numeric)
        :return: N/A
        """
        self.each_donation.append(amnt)

    def write_letter(self, *args):
        """
        Pre-written text with donor info to be added on
        individual run
        :param args:
        :return:
        """
        donor_container = {
            'name': self.name,
            'donation': self.each_donation[-1],
            'num_donations': len(self.each_donation)
        }
        thankyou_file = ('''
Dear {name},

Thank you for your continued support through your most recent contribution of ${donation:,.2f}. 
Your {num_donations} donation(s) over this year have been instrumental in moving towards our
fundraising goal of $100,000.00 to benefit local charities. On behalf of all
the members of the Foundation, we thank you for your generosity and look forward
to working with you in the future to build a better world!

Best wishes,

Foundation Board of Directors\n'''.format(**donor_container))

        return thankyou_file

    @property
    def sum_donations(self):
        """
        Returns sum of donor's donations
        :return:
        """
        return sum(self.each_donation)

    @property
    def num_donations(self):
        """
        Returns number of donations for self.donor
        :return:
        """
        return len(self.each_donation)

    @property
    def avg_donations(self):
        """
        Returns average value of donations for self.donor
        :return:
        """
        return sum(self.each_donation) / len(self.each_donation)

    def __str__(self):
        """
        Formatting for report columns
        :return:
        """
        return "{:<20}{:>15,.2f}{:^18}{:>10,.2f}".\
            format(self.name, self.sum_donations, self.num_donations, self.avg_donations)

    def __repr__(self):
        """
        :return:
        """
        return "Donor(\'{}\', {})".format(self.name, self.each_donation)

    def __lt__(self, other):
        return self.sum_donations < other.sum_donations

    def __gt__(self, other):
        return self.sum_donations > other.sum_donations

    def __eq__(self, other):
        return self.sum_donations == other.sum_donations

    def __ne__(self, other):
        return self.sum_donations != other.sum_donations
예제 #7
0
class Donor(JsonSaveable):

    name = String()
    history = List()

    def __init__(self, title, gift):
        self.name = title
        self.history = []
        if type(gift) == int or type(gift) == float:
            self.history.append(round(gift, 2))
        elif type(gift) == list:
            for x in gift:
                self.history.append(round(x, 2))

    def __len__(self):
        return len(self_history)

    @property
    def avg_gift(self):
        return sum(self.history) / len(self.history)

    @property
    def sum_gift(self):
        return sum(self.history)

    @property
    def info(self):
        return (self.name, len(self.history), self.avg_gift, self.sum_gift)

    def add_gift(self, value):
        self.history.append(round(value, 2))

    def challenge(self, factor, min_gift=None, max_gift=None):
        if min_gift is None:
            min_gift = min(self.history)
        if max_gift is None:
            max_gift = max(self.history)
        filt_hist = list(
            filter(lambda x: x >= min_gift and x <= max_gift, self.history))
        remain_hist = list(
            filter(lambda x: x < min_gift or x > max_gift, self.history))
        filt_hist = list(map(lambda x: x * factor, filt_hist))
        return Donor("*" + self.name, filt_hist + remain_hist)

    def thank_u_letter_str(self, new_gift=False):
        divider = "\n" + "*" * 50 + "\n"
        thank_u_letter = divider + f"Dearest {self.name},\n"
        if new_gift:
            thank_gift = self.history[len(self.history) - 1]
            thank_u_letter += "\tThank you for your most recent donation of"
        else:
            thank_gift = self.sum_gift
            thank_u_letter += "\tThank you for your lifetime total of "
        thank_u_letter += (f" ${thank_gift:.2f}!\n"
                           "We will use your donation(s) to create real "
                           "living Pokemon.\n"
                           "You now have our eternal loyalty. Use it wisely.\n"
                           "Sincerely,\n"
                           f"We're a Pyramid Scheme & so is {self.name}" +
                           divider)
        return thank_u_letter