Ejemplo n.º 1
0
def test_is_compatible_project_type(
    dbsession,
    project,
    customer,
    user,
    company,
    other_project_type,
    default_business_type,
    mk_business_type,
):
    from autonomie.models.task.estimation import Estimation
    estimation = Estimation(
        company=company,
        project=project,
        customer=customer,
        user=user,
        business_type=other_project_type.default_business_type,
    )
    dbsession.add(estimation)
    dbsession.flush()

    from autonomie.forms.project import _is_compatible_project_type
    assert _is_compatible_project_type(project, other_project_type)

    new_estimation = Estimation(
        company=company,
        project=project,
        customer=customer,
        user=user,
        business_type=default_business_type,
    )
    dbsession.add(new_estimation)
    dbsession.flush()
    assert not _is_compatible_project_type(project, other_project_type)
def upgrade():
    # Devis
    op.add_column("estimation_line",
                    sa.Column("tva", sa.Integer))
    # Adding tva to the lines
    op.execute("""
    update estimation_line as l join estimation as e on e.id=l.task_id set l.tva=e.tva;
    """)
    # Moving dicounts to a discount table
    for est in Estimation.query().all():
        id_ = est.id
        op.execute("""
insert discount (description, amount, tva, task_id) select "Remise", discountHT, tva, id from estimation where estimation.id='%s' and estimation.discountHT!= 0 and estimation.discountHT is not null ;
    """% (id_))
    # Factures
    op.add_column("invoice_line",
                    sa.Column("tva", sa.Integer))
    # Adding tva to the lines
    op.execute("""
    update invoice_line as l join invoice as i on i.id=l.task_id set l.tva=i.tva;
    """)
    # Moving discounts to discount table
    for inv in Invoice.query().all():
        id_ = inv.id
        op.execute("""
insert discount (description, amount, tva, task_id) select "Remise", discountHT, tva, id from invoice where invoice.id='%s' and invoice.discountHT!= 0 and invoice.discountHT is not null ;
    """% (id_))
    # Avoirs
    add_column("cancelinvoice_line",
                    sa.Column("tva", sa.Integer))
    if column_exists("cancelinvoice", "tva"):
        # If the column exists, there may be some cancelinvoices
        op.execute("""
    update cancelinvoice_line as l join cancelinvoice as i on i.id=l.task_id set l.tva=i.tva;
    """)
Ejemplo n.º 3
0
    def add_estimation(cls, business, user):
        """
        Add a new estimation to the current business

        :param obj business: The current business instance this service is
        attached to
        :returns: A new Estimation instance
        """
        from autonomie.models.task.estimation import Estimation
        estimation = Estimation(
            user=user,
            company=business.project.company,
            project=business.project,
            customer_id=cls._get_customer_id(business),
            business_id=business.id,
            business_type_id=business.business_type_id,
        )
        estimation.add_default_payment_line()
        estimation.initialize_business_datas()
        DBSESSION().add(estimation)
        DBSESSION().flush()
        return estimation
Ejemplo n.º 4
0
def manage(request):
    """
        The manage view
    """
    query = Estimation.query()
    query = query.join(Estimation.phase)
    query = query.filter(
        and_(
            Estimation.CAEStatus == 'wait',
            Phase.name is not None
        )
    )
    estimations = query.order_by(Task.statusDate).all()
    for item in estimations:
        item.url = request.route_path(item.type_, id=item.id)

    invoices = Task.query()\
            .filter(Task.type_.in_(('invoice', 'cancelinvoice',)))\
            .join(Task.phase)\
            .filter(and_(Task.CAEStatus == 'wait', Phase.name is not None))\
            .order_by(Task.type_).order_by(Task.statusDate).all()

    for item in invoices:
        item.url = request.route_path(item.type_, id=item.id)

    expenses = ExpenseSheet.query()\
        .filter(ExpenseSheet.status == 'wait')\
        .order_by(ExpenseSheet.month)\
        .order_by(ExpenseSheet.status_date).all()
    for expense in expenses:
        expense.url = request.route_path("expensesheet", id=expense.id)


    user_id = request.user.id
    query = Activity.query()
    query = query.join(Activity.conseillers)
    query = query.filter(
        Activity.conseillers.any(User.id==user_id)
    )
    query = query.filter(Activity.status=='planned')
    query = query.order_by(Activity.datetime).limit(10)
    activities = query.all()

    for activity in activities:
        activity.url = request.route_path("activity", id=activity.id)

    return dict(title=u"Documents en attente de validation",
                invoices=invoices,
                estimations=estimations,
                expenses = expenses,
                activities=activities)
Ejemplo n.º 5
0
    def submit_success(self, appstruct):
        log.debug("Submitting estimation add")
        appstruct = get_estimation_dbdatas(appstruct)
        # Next estimation number for current project
        snumber = self.context.get_next_estimation_number()

        estimation = Estimation()
        estimation.project = self.context
        estimation.owner = self.request.user
        estimation = merge_session_with_post(estimation,
                                             appstruct["estimation"])
        estimation.set_sequence_number(snumber)
        estimation.set_number()
        estimation.set_name()
        try:
            estimation = self.set_task_status(estimation)
            # Line handling
            estimation = add_lines_to_estimation(estimation, appstruct)
            self.dbsession.add(estimation)
            self.dbsession.flush()
            self.session.flash(u"Le devis a bien été ajoutée.")
        except Forbidden, err:
            self.request.session.flash(err.message, queue='error')
Ejemplo n.º 6
0
    def submit_success(self, appstruct):
        log.debug("Submitting estimation add")
        appstruct = get_estimation_dbdatas(appstruct)
        # Next estimation number for current project
        snumber = self.context.get_next_estimation_number()

        estimation = Estimation()
        estimation.project = self.context
        estimation.owner = self.request.user
        estimation = merge_session_with_post(estimation, appstruct["estimation"])
        estimation.set_sequence_number(snumber)
        estimation.set_number()
        estimation.set_name()
        try:
            estimation = self.set_task_status(estimation)
            # Line handling
            estimation = add_lines_to_estimation(estimation, appstruct)
            self.dbsession.add(estimation)
            self.dbsession.flush()
            self.session.flash(u"Le devis a bien été ajoutée.")
        except Forbidden, err:
            self.request.session.flash(err.message, queue='error')
Ejemplo n.º 7
0
def manage(request):
    """
        The manage view
    """
    query = Estimation.query()
    query = query.join(Estimation.phase)
    query = query.filter(
        and_(Estimation.CAEStatus == 'wait', Phase.name is not None))
    estimations = query.order_by(Task.statusDate).all()
    for item in estimations:
        item.url = request.route_path(item.type_, id=item.id)

    invoices = Task.query()\
            .filter(Task.type_.in_(('invoice', 'cancelinvoice',)))\
            .join(Task.phase)\
            .filter(and_(Task.CAEStatus == 'wait', Phase.name is not None))\
            .order_by(Task.type_).order_by(Task.statusDate).all()

    for item in invoices:
        item.url = request.route_path(item.type_, id=item.id)

    expenses = ExpenseSheet.query()\
            .filter(ExpenseSheet.status == 'wait')\
            .order_by(ExpenseSheet.month).all()
    for expense in expenses:
        expense.url = request.route_path("expensesheet", id=expense.id)

    user_id = request.user.id
    query = Activity.query()
    query = query.join(Activity.conseillers)
    query = query.filter(Activity.conseillers.any(User.id == user_id))
    query = query.filter(Activity.status == 'planned')
    query = query.order_by(Activity.datetime).limit(10)
    activities = query.all()

    for activity in activities:
        activity.url = request.route_path("activity", id=activity.id)

    return dict(title=u"Documents en attente de validation",
                invoices=invoices,
                estimations=estimations,
                expenses=expenses,
                activities=activities)
Ejemplo n.º 8
0
def estimation(
    dbsession,
    tva,
    unity,
    project,
    customer,
    company,
    user,
    phase,
):
    from autonomie.models.task.estimation import Estimation
    estimation = Estimation(
        company=company,
        project=project,
        customer=customer,
        user=user,
        phase=phase,
    )
    dbsession.add(estimation)
    dbsession.flush()
    return estimation
Ejemplo n.º 9
0
    def add_estimation(cls, business, user):
        """
        Add a new estimation to the current business

        :param obj business: The current business instance this service is
        attached to
        :returns: A new Estimation instance
        """
        from autonomie.models.task.estimation import Estimation
        estimation = Estimation(
            user=user,
            company=business.project.company,
            project=business.project,
            customer_id=cls._get_customer_id(business),
            business_id=business.id,
            business_type_id=business.business_type_id,
        )
        estimation.add_default_payment_line()
        estimation.initialize_business_datas()
        DBSESSION().add(estimation)
        DBSESSION().flush()
        return estimation
Ejemplo n.º 10
0
 def query(self):
     query = Estimation.query().join(Task.project).join(Task.customer)
     company_id = self.request.context.id
     query = query.filter(Project.company_id==company_id)
     return query
Ejemplo n.º 11
0
 def query(self):
     query = Estimation.query().join(Task.project).join(Task.customer)
     company_id = self.request.context.id
     query = query.filter(Project.company_id == company_id)
     return query