Exemplo n.º 1
0
    def print_params_lines(self, quarters, output):
        """
        Prints param stream.

            ASSUMPTION: quarters is a list of Quarter objects.
        """
        print >>output, "=====params"
        for q in quarters:
            print >> output, "\t=====%s" % str(q)
            start_date_str = dates.date_to_str(q.get_start_date())
            end_date_str = dates.date_to_str(q.get_end_date())
            print >> output, "\t\t%s\t%s\t%s" % (start_date_str, end_date_str, ":".join(self.skill_headings))

        return
Exemplo n.º 2
0
 def format_vacation(self, vacation):
     """
     Vacation to string suitable for appify apps.
     """
     days = [dates.date_to_str(d) for d in vacation]
     result = ":".join(days)
     return result
Exemplo n.º 3
0
    def get_date_strings(self, min_date, max_date, start_date, end_date):
        # Check dates here
        if end_date.date() < min_date or start_date.date() > max_date:
            return None

        # Clamp dates
        if start_date.date() < min_date:
            start_date = datetime.datetime(min_date.year, min_date.month, min_date.day)
        if end_date.date() > max_date:
            end_date = datetime.datetime(max_date.year, max_date.month, max_date.day)

        dates = expand_dates([[start_date, end_date]])

        result = [date_to_str(d) for d in dates]
        return result
Exemplo n.º 4
0
    def condition_vacation_data(self, staff_lines, vacation_lines, oncall_lines):
        output = StringIO.StringIO()

        # Get date range for the vacationator
        start = datetime.date.today()
        end = start + datetime.timedelta(days=self.horizon)

        start_date = date_to_str(start)
        end_date = date_to_str(end)

        # Filter assignment records by current quarter
        cur_quarter = quarter.quarter_from_date(start)
        assignments_parser = RawAssignmentsParser(staff_lines)
        parsed_staff = filter(lambda rec: rec['quarter'] == cur_quarter, assignments_parser.get_records())

        staff_names = [p['name'] for p in parsed_staff]

        vacation_parser = RawVacationParser(vacation_lines)
        name_to_vac_name = vacation_parser.map_names_to_vac_names(staff_names)
        vac_name_to_names = vacation_parser.invert_map(name_to_vac_name)
        vac_name_to_names["All"] = ["All"]
        expanded_vacations = vacation_parser.get_expanded_records()

        oncall_days = self.parse_oncall(start, end, staff_names, vacation_parser, oncall_lines)

        # Print param stream
        print >>output, "=====params"
        print >>output, "\t%s\t%s" % (start_date, end_date)

        # Print staff stream
        print >>output, "=====staff"
        for rec in parsed_staff:
            print >>output, "\t%s" % "\t".join([rec['name'], rec['track']])

        # Print vacation "out days"
        print >>output, "=====outdays"
        for vac in expanded_vacations:
            vacation_person_name = vac[0]
            if vacation_person_name not in vac_name_to_names:
                continue
            names = vac_name_to_names[vacation_person_name]
            for na in names:
                # The field order depends on what's returned from RawVacationParser.get_expanded_records
                vac_type = vac[1]
                vac_dates = vac[2]
                # Assemble date string, clamping to start and end dates
                date_strings = []
                for d in vac_dates:
                    if d.date() >= start and d.date() <= end:
                        date_strings.append(date_to_str(d))

                # Print a record if there are any out dates
                if date_strings:
                    print >>output, "\t%s" % "\t".join([na, vac_type, ":".join(date_strings)])

        # Print oncall "out days"
        for d in oncall_days:
            print >>output, "\t%s" % "\t".join(d)

        result = output.getvalue()
        output.close()

        return result