Exemplo n.º 1
0
 def submit_success(self, appstruct):
     model = Phase()
     model.project_id = self.context.id
     merge_session_with_post(model, appstruct)
     self.dbsession.add(model)
     redirect = self.request.route_path("project", id=model.project_id)
     return HTTPFound(redirect)
Exemplo n.º 2
0
def phase2(dbsession, project2):
    from autonomie.models.project import Phase
    phase = Phase(name=u"Phase")
    phase.project = project2
    phase.project_id = project2.id
    project2.phases.append(phase)
    dbsession.add(phase)
    dbsession.flush()
    return phase
Exemplo n.º 3
0
def phase(dbsession, project):
    from autonomie.models.project import Phase
    phase = Phase(name=u"Phase")
    phase.project = project
    phase.project_id = project.id
    project.phases.append(phase)
    dbsession.add(phase)
    dbsession.flush()
    return phase
Exemplo n.º 4
0
 def submit_success(self, appstruct):
     model = Phase()
     model.project_id = self.context.id
     merge_session_with_post(model, appstruct)
     self.dbsession.add(model)
     self.dbsession.flush()
     redirect = self.request.route_path("project",
                                        id=model.project_id,
                                        _query={'phase': model.id})
     return HTTPFound(redirect)
Exemplo n.º 5
0
def add_phase(project, phase_name):
    phase = Phase(name=phase_name)
    phase.project = project

    session = DBSESSION()
    session.add(phase)
    session.flush()

    print u"Added phase to %s: %s" % (project.name, phase_name)

    return phase
Exemplo n.º 6
0
def populate_db(session):
    from autonomie.models.user import User
    user = User(
        login='******',
        firstname='user1_firstname',
        lastname="user1_lastname",
        email="*****@*****.**"
    )
    user.set_password('o')
    session.add(user)

    from autonomie.models.project import Project
    project = Project(
        name='Projet 1',
        code='P001',
        definition="Projet 1"
    )
    session.add(project)

    from autonomie.models.customer import Customer
    cust = Customer(
        code='C001',
        name='Client1',
        contactLastName=u'Client Lastname',
        address=u'15 rue Victore Hugo',
        zipCode='69003',
        city='Lyon',
    )
    cust.projects.append(project)
    session.add(cust)

    from autonomie.models.project import Phase
    phase = Phase(name='Phase de test')
    phase.project = project
    session.add(phase)


    from autonomie.models.company import Company
    c = Company(
        name="company1",
        goal="Company of user1",
        phone='0457858585',
    )
    c.employees.append(user)
    c.customers.append(cust)
    c.projects.append(project)
    session.add(c)
    from autonomie.scripts import fake_database
    fake_database.set_configuration()
Exemplo n.º 7
0
def populate_db(session):
    from autonomie.models.user import User
    user = User(
        login='******',
        firstname='user1_firstname',
        lastname="user1_lastname",
        email="*****@*****.**"
    )
    user.set_password('o')
    session.add(user)

    from autonomie.models.project import Project
    project = Project(
        name='Projet 1',
        code='P001',
        definition="Projet 1"
    )
    session.add(project)

    from autonomie.models.customer import Customer
    cust = Customer(
        code='C001',
        name='Client1',
        contactLastName=u'Client Lastname',
        address=u'15 rue Victore Hugo',
        zipCode='69003',
        city='Lyon',
    )
    cust.projects.append(project)
    session.add(cust)

    from autonomie.models.project import Phase
    phase = Phase(name='Phase de test')
    phase.project = project
    session.add(phase)


    from autonomie.models.company import Company
    c = Company(
        name="company1",
        goal="Company of user1",
        phone='0457858585',
    )
    c.employees.append(user)
    c.customers.append(cust)
    c.projects.append(project)
    session.add(c)
    from autonomie.scripts import fake_database
    fake_database.set_configuration()
Exemplo n.º 8
0
def test_editphase(config, dbsession, project, get_csrf_request_with_db):
    from autonomie.views.project import PhaseEditFormView
    from autonomie.models.project import Phase
    phase = Phase(name='test', project=project)
    dbsession.merge(phase)
    dbsession.flush()

    config.add_route('project/{id}', '/')
    req = get_csrf_request_with_db()
    req.context = phase
    view = PhaseEditFormView(req)
    view.submit_success({'name': u'Phasé'})
    dbsession.flush()
    phase = Phase.get(phase.id)
    assert (phase.name == u'Phasé')
Exemplo n.º 9
0
    def submit_success(self, appstruct):
        if self.factory is None:
            raise Exception("Forgot to set the factory attribute")

        name = appstruct['name']
        phase_id = appstruct['phase_id']
        phase = Phase.get(phase_id)
        project_id = appstruct['project_id']
        project = Project.get(project_id)
        customer_id = appstruct['customer_id']
        customer = Customer.get(customer_id)

        new_object = self.factory(
            self.context.company,
            customer,
            project,
            phase,
            self.request.user,
        )
        new_object.name = name

        if hasattr(self, "_more_init_attributes"):
            self._more_init_attributes(new_object, appstruct)

        self.dbsession.add(new_object)
        self.dbsession.flush()

        if hasattr(self, "_after_flush"):
            self._after_flush(new_object)

        url = self.request.route_path("/%ss/{id}" % new_object.type_,
                                      id=new_object.id)
        return HTTPFound(url)
Exemplo n.º 10
0
    def submit_success(self, appstruct):
        logger.debug("# Duplicating a document #")

        name = appstruct['name']
        phase_id = appstruct['phase_id']
        phase = Phase.get(phase_id)
        project_id = appstruct['project_id']
        project = Project.get(project_id)
        customer_id = appstruct['customer_id']
        customer = Customer.get(customer_id)

        task = self.context.duplicate(
            self.request.user,
            project,
            phase,
            customer,
        )
        task.name = name
        task.course = appstruct['course']
        self.dbsession.add(task)
        self.dbsession.flush()
        logger.debug(
            u"The {t.type_} {t.id} has been duplicated to {new_t.id}".format(
                t=self.context, new_t=task))
        return HTTPFound(
            self.request.route_path('/%ss/{id}' % self.context.type_,
                                    id=task.id))
def add_internal_number(session, logger):
    logger.warn("Adding internal_number to Task")
    NUMBER_TMPLS = {
        'estimation': u"{s.project.code}_{s.customer.code}_D{s.project_index}\
_{s.date:%m%y}",
        'invoice': u"{s.project.code}_{s.customer.code}_F{s.project_index}\
_{s.date:%m%y}",
        'cancelinvoice': u"{s.project.code}_{s.customer.code}_A{s.project_index}\
_{s.date:%m%y}"
    }
    from autonomie.models.task import Task
    from autonomie.models.customer import Customer
    from autonomie.models.project import Project
    from autonomie.models.project import Phase

    from sqlalchemy.orm import joinedload
    from sqlalchemy.orm import load_only

    query = Task.query().options(
        load_only("project_index", "company_index", "date", "phase_id", 'type_')
    )

    query = query.filter(
        Task.type_.in_(['invoice', 'estimation', 'cancelinvoice'])
    )
    query = query.options(joinedload(Task.customer).load_only(Customer.code))
    query = query.options(joinedload(Task.project).load_only(Project.code))

    for task in query:
        tmpl = NUMBER_TMPLS[task.type_]
        if Phase.get(task.phase_id) is None:
            session.delete(task)
        else:
            task.internal_number = tmpl.format(s=task).upper()
            session.merge(task)
Exemplo n.º 12
0
def objects():
    user = User(login=u"test_user1",
                firstname=u"firstname",
                lastname=u"lastname")
    project = Project(name=u"Projet", code=u"PROJ")
    phase = Phase(name="test", project=project)
    return (user, phase, project)
Exemplo n.º 13
0
def add_internal_number(session, logger):
    logger.warn("Adding internal_number to Task")
    NUMBER_TMPLS = {
        'estimation': u"{s.project.code}_{s.customer.code}_D{s.project_index}\
_{s.date:%m%y}",
        'invoice': u"{s.project.code}_{s.customer.code}_F{s.project_index}\
_{s.date:%m%y}",
        'cancelinvoice': u"{s.project.code}_{s.customer.code}_A{s.project_index}\
_{s.date:%m%y}"
    }
    from autonomie.models.task import Task
    from autonomie.models.customer import Customer
    from autonomie.models.project import Project
    from autonomie.models.project import Phase

    from sqlalchemy.orm import joinedload
    from sqlalchemy.orm import load_only

    query = Task.query().options(
        load_only("project_index", "company_index", "date", "phase_id", 'type_')
    )

    query = query.filter(
        Task.type_.in_(['invoice', 'estimation', 'cancelinvoice'])
    )
    query = query.options(joinedload(Task.customer).load_only(Customer.code))
    query = query.options(joinedload(Task.project).load_only(Project.code))

    for task in query:
        tmpl = NUMBER_TMPLS[task.type_]
        if Phase.get(task.phase_id) is None:
            session.delete(task)
        else:
            task.internal_number = tmpl.format(s=task).upper()
            session.merge(task)
Exemplo n.º 14
0
 def pre_phasechange_process(self, task, status, params):
     """
         pre process method for phase changing
     """
     form = get_phasechange_form(self.request)
     appstruct = form.validate(params.items())
     log.debug(u" * Form has been validated")
     phase_id = appstruct.get('phase')
     phase = Phase.get(phase_id)
     appstruct['phase'] = phase
     return appstruct
Exemplo n.º 15
0
def test_addphase(config, dbsession, project, get_csrf_request_with_db):
    from autonomie.views.project import PhaseAddFormView
    from autonomie.models.project import Phase
    config.add_route('project/{id}', '/')
    req = get_csrf_request_with_db()
    req.context = project
    view = PhaseAddFormView(req)
    view.submit_success({'name': u'Phasé'})
    dbsession.flush()
    phases = Phase.query().filter(Phase.project==project).all()
    assert(len(phases) == 2)
Exemplo n.º 16
0
def test_addphase(config, dbsession, project, get_csrf_request_with_db):
    from autonomie.views.project import PhaseAddFormView
    from autonomie.models.project import Phase
    config.add_route('project/{id}', '/')
    req = get_csrf_request_with_db()
    req.context = project
    view = PhaseAddFormView(req)
    view.submit_success({'name': u'Phasé'})
    dbsession.flush()
    phases = Phase.query().filter(Phase.project == project).all()
    assert (len(phases) == 2)
Exemplo n.º 17
0
    def __call__(self):
        phase_id = self.request.params.get('phase')
        if phase_id:
            phase = Phase.get(phase_id)
            if phase in self.context.project.phases:
                self.context.phase_id = phase_id
                self.request.dbsession.merge(self.context)

        return HTTPFound(
            self.request.route_path(PROJECT_ITEM_PHASE_ROUTE,
                                    id=self.context.project_id,
                                    _query={'phase': phase_id}))
Exemplo n.º 18
0
def project_addphase(request):
    """
        Add a phase to the current project
    """
    #TODO : utiliser deform pour manager l'ajout de phase (pour le principe)
    # This one should be a Form View
    project = request.context
    if not request.params.get('phase'):
        request.session.flash(u"Le nom de la phase est obligatoire",
                                                            queue='error')
        anchor = "showphase"
    else:
        phasename = request.params.get('phase')
        phase = Phase()
        phase.name = phasename
        phase.project_id = project.id
        request.dbsession.add(phase)
        request.session.flash(u"La phase {0} a bien été \
rajoutée".format(phasename))
        anchor = ""
    return HTTPFound(request.route_path('project', id=project.id,
                                                    _anchor=anchor))
Exemplo n.º 19
0
 def submit_success(self, appstruct):
     """
         Add a project with a default phase in the database
     """
     project = Project()
     project.company_id = self.request.context.id
     customer_ids = appstruct.pop("customers", [])
     project = merge_session_with_post(project, appstruct)
     for customer_id in customer_ids:
         customer = Customer.get(customer_id)
         if customer:
             project.customers.append(customer)
     self.dbsession.add(project)
     self.dbsession.flush()
     # Add a default phase to the project
     default_phase = Phase()
     default_phase.project = project
     self.dbsession.add(default_phase)
     message = u"Le projet <b>{0}</b> a été ajouté avec succès".format(
                                                             project.name)
     self.request.session.flash(message)
     return HTTPFound(self.request.route_path('project', id=project.id))
Exemplo n.º 20
0
def test_editphase(config, dbsession, project, get_csrf_request_with_db):
    from autonomie.views.project import PhaseEditFormView
    from autonomie.models.project import Phase
    phase = Phase(name='test', project=project)
    dbsession.merge(phase)
    dbsession.flush()

    config.add_route('project/{id}', '/')
    req = get_csrf_request_with_db()
    req.context = phase
    view = PhaseEditFormView(req)
    view.submit_success({'name': u'Phasé'})
    dbsession.flush()
    phase = Phase.get(phase.id)
    assert(phase.name == u'Phasé')
Exemplo n.º 21
0
    def __call__(self):
        phase_id = self.request.params.get('phase')
        if phase_id:
            phase = Phase.get(phase_id)
            if phase in self.context.project.phases:
                self.context.phase_id = phase_id
                self.request.dbsession.merge(self.context)

        return HTTPFound(
            self.request.route_path(
                PROJECT_ITEM_PHASE_ROUTE,
                id=self.context.project_id,
                _query={'phase': phase_id}
            )
        )
Exemplo n.º 22
0
    def submit_success(self, appstruct):
        """
            Add a project with a default phase in the database
        """
        # It's an add form
        model = self.schema.objectify(appstruct)
        model.company = self.context

        # Add a default phase to the project
        default_phase = Phase()
        model.phases.append(default_phase)

        self.dbsession.add(model)

        self.dbsession.flush()

        self.session.flash(self.validation_msg)
        return HTTPFound(self.request.route_path('project', id=model.id))
Exemplo n.º 23
0
def get_latest_phase(request, phases):
    """
    Return the phase where we can identify the last modification
    :param list phases: The list of phases of the given project
    """
    result = 0
    if 'phase' in request.GET:
        result = Phase.get(request.GET['phase'])

    else:
        # We get the latest used task and so we get the latest used phase
        all_tasks = []
        for phase in phases:
            all_tasks.extend(phase.tasks)
        all_tasks.sort(key=lambda task: task.status_date, reverse=True)

        if all_tasks:
            result = all_tasks[0].phase
    return result
Exemplo n.º 24
0
 def pre_duplicate_process(self, task, status, params):
     """
         Common pre process method for document duplication
     """
     form = get_duplicate_form(self.request)
     # if an error is raised here, it will be cached a level higher
     appstruct = form.validate(params.items())
     logger.debug(u" * Form has been validated")
     customer_id = appstruct.get('customer')
     customer = Customer.get(customer_id)
     project_id = appstruct.get('project')
     project = Project.get(project_id)
     phase_id = appstruct.get('phase')
     phase = Phase.get(phase_id)
     logger.debug(u" * Phase : %s" % phase)
     logger.debug(u" * Project : %s" % project)
     appstruct['phase'] = phase
     appstruct['project'] = project
     appstruct['customer'] = customer
     appstruct['user'] = self.request.user
     return appstruct
Exemplo n.º 25
0
 def pre_duplicate_process(self, task, status, params):
     """
         Common pre process method for document duplication
     """
     form = get_duplicate_form(self.request)
     # if an error is raised here, it will be cached a level higher
     appstruct = form.validate(params.items())
     log.debug(u" * Form has been validated")
     customer_id = appstruct.get('customer')
     customer = Customer.get(customer_id)
     project_id = appstruct.get('project')
     project = Project.get(project_id)
     phase_id = appstruct.get('phase')
     phase = Phase.get(phase_id)
     log.debug(u" * Phase : %s" % phase)
     log.debug(u" * Project : %s" % project)
     appstruct['phase'] = phase
     appstruct['project'] = project
     appstruct['customer'] = customer
     appstruct['user'] = self.request.user
     return appstruct
Exemplo n.º 26
0
def get_all_phases(request):
    project_ids = [p.id for p in get_all_projects(request)]
    return Phase.query().filter(Phase.project_id.in_(project_ids)).all()
Exemplo n.º 27
0
def project(content):
    proj = Project.query().first()
    proj.code = "PRO1"
    proj.phases.append(Phase(name="test"))
    return proj
Exemplo n.º 28
0
def get_all_phases(request):
    project_ids = [p.id for p in get_all_projects(request)]
    return Phase.query().filter(Phase.project_id.in_(project_ids)).all()
Exemplo n.º 29
0
def phase(content):
    return Phase.query().first()
Exemplo n.º 30
0
def phase(content):
    return Phase.query().first()