def view_home(request): """ Default home view """ fanstatic_resources.dashboard_home.need() session = DBSession() user = request.authenticated_user projects = session.query(Project) active_projects = set(projects.filter(Project.active)) my_projects = projects\ .filter(Project.users_favorite(user))\ .order_by(Project.customer_id).all() my_projects = request.filter_viewables(my_projects) other_active_projects = sorted(request.filter_viewables(active_projects.difference(my_projects)), key=unicodelower) boards = [ { 'title': 'Favorite projects', 'custprojs': group_by_customer(my_projects), } ] listings = [] max_board_projects = 20 if not len(my_projects) and len(other_active_projects) < max_board_projects: boards.append({ 'title': 'Active projects', 'custprojs': group_by_customer(other_active_projects), }) else: listing_columns = 4 listings.append({ 'title': 'Active projects', 'projgroups': tuple(chunks(tuple(other_active_projects), listing_columns)), }) return { 'boards': boards, 'listings': listings, 'render_application_icon': render_application_icon, 'get_application_link': get_application_link, }
def handle_save(self, form, appstruct): """ The main handle method for the wizard. """ customer = self.context.get_instance() # create new users recipients = [] groups = {} mailer = get_mailer(self.request) for newuser in appstruct['new_users']: user = User(fullname=newuser['fullname'], email=newuser['email']) if not newuser['role'] in groups: groups[newuser['role']] = [] groups[newuser['role']].append(user) if newuser['send_email_howto']: recipients.append(newuser['email']) for recipient in recipients: headers = {"header": u'Welcome to Penelope', "message": ('You were enabled as a user of Penelope, ' 'our online projects and trouble ticket ' 'management platform. Your username is <strong>%s</strong>. ' 'With penelope you will be ' 'able to open new tickets and follow the evolution ' 'of the issues you opened. We recommend to double ' 'check that the tickets you open have the ' '"Ticked opened by customer" field set at "SI" (Yes).' % recipient), "link": '%s/password_reset_form' % (self.request.application_url), "action": 'Activate your account NOW!'} message = Message(subject=WELCOME_SUBJECT, recipients=[recipient], body='Welcome to Penelope', extra_headers={'X-MC-Template': 'general', 'X-MC-MergeVars': json.dumps(headers)}) mailer.send(message) #create project and set manager manager = self.request.authenticated_user project = Project(name=appstruct['project']['project_name'], manager=manager) #set groups for g in appstruct['users']: if not g['role'] in groups: groups[g['role']] = [] for u in g['usernames']: user = DBSession.query(User).get(u) groups[g['role']].append(user) for rolename, users in groups.items(): role = DBSession.query(Role).filter(Role.name == rolename).one() group = Group(roles=[role, ], users=users) project.add_group(group) #create contract with cr crs = appstruct['contracts']['customer_requests'] co = appstruct['contracts']['contract'] contract = Contract(**co) contract.project_id = project.id #create CR tickets = [] for cr in crs: customer_request = CustomerRequest(name=cr['title']) person_types = { 'junior': 'Junior', 'senior': 'Senior', 'graphic': 'Graphic', 'pm': 'Project manager', 'architect': 'Architect', 'tester': 'Tester' } for key, value in person_types.items(): if cr[key]: Estimation(person_type=value, days=cr[key], customer_request=customer_request) project.add_customer_request(customer_request) customer_request.contract = contract if not cr['ticket']: continue tickets += [{'summary': cr['title'], 'customerrequest': customer_request, 'reporter': manager.email, 'type': 'task', 'priority': 'major', 'milestone': 'Backlog', 'owner': manager.email}] #create project management CR and tickets project_management_cr = CustomerRequest(name="Project management") project_management_cr.contract = contract project.add_customer_request(project_management_cr) project_management_tickets = PM_TICKETS for summary, description in project_management_tickets.items(): tickets += [{ 'summary': summary, 'description': description, 'customerrequest': project_management_cr, 'reporter': manager.email, 'type': 'task', 'priority': 'major', 'sensitive': '1', 'milestone': 'Backlog', 'owner': manager.email}] #create google docs/folders for app_definition in appstruct['google_docs']: app = GoogleDoc(name=app_definition['name'], api_uri=app_definition['uri']) if app_definition['share_with_customer']: acl = ApplicationACL(role_id='customer', permission_name='view') acl.project = app project.add_application(app) #create trac trac = Trac(name="Trac for %s" % appstruct['project']['project_name']) trac.settings = self.request.registry.settings # an ugly patch to pass # the missing settings trac.milestones = appstruct['milestones'] trac.tickets = tickets if appstruct['project']['trac_name']: trac.project_name = appstruct['project']['trac_name'] else: trac.project_name = appstruct['project']['project_name'] project.add_application(trac) customer.add_project(project) raise exc.HTTPFound(location=self.request.fa_url('Customer', customer.id))