Ejemplo n.º 1
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['task']
        )
        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.º 2
0
def test_set_number():
    est = Estimation()
    est.project = MagicMock(code="PRO1")
    est.customer = MagicMock(code="CLI1")
    est.taskDate = datetime.date(1969, 07, 31)
    est.set_sequence_number(15)
    est.set_number()
    assert est.number == u"PRO1_CLI1_D15_0769"
Ejemplo n.º 3
0
 def test_set_number(self):
     est = Estimation()
     est.project = MagicMock(code="PRO1")
     est.customer = MagicMock(code="CLI1")
     est.taskDate = datetime.date(1969, 07, 31)
     est.set_sequenceNumber(15)
     est.set_number()
     self.assertEqual(est.number, u"PRO1_CLI1_D15_0769")
Ejemplo n.º 4
0
 def test_interfaces(self):
     self.assertTrue(verifyObject(ITask, Task()))
     self.assertTrue(verifyObject(IValidatedTask, Estimation()))
     self.assertTrue(verifyObject(IPaidTask, Invoice()))
     self.assertTrue(verifyObject(IPaidTask, CancelInvoice()))
     self.assertTrue(verifyObject(IInvoice, Invoice()))
     self.assertTrue(verifyObject(IInvoice, CancelInvoice()))
Ejemplo n.º 5
0
    def submit_success(self, appstruct):
        log.debug("Submitting estimation add")
        appstruct = get_estimation_dbdatas(appstruct)

        customer_id = appstruct["task"]['customer_id']
        customer = Customer.get(customer_id)

        estimation = Estimation(
            self.context.company,
            customer,
            self.context,
            self.context.phases[0],
            self.request.user,
        )
        estimation = merge_session_with_post(
            estimation,
            appstruct['task']
        )
        try:
            # Line handling
            estimation = add_lines_to_estimation(estimation, appstruct)
            self.dbsession.add(estimation)
            self.dbsession.flush()
            estimation = self.set_task_status(estimation)
            self.session.flash(u"Le devis a bien été ajouté.")
        except Forbidden, err:
            self.request.session.flash(err.message, queue='error')
Ejemplo n.º 6
0
 def estimations(self):
     """
         Query for estimations
     """
     return Estimation.query().join(Task.project)\
                 .filter(Project.company_id==self.request.context.id)\
                 .filter(extract('year', Estimation.taskDate)==self.year)
Ejemplo n.º 7
0
 def estimations(self):
     """
         Query for estimations
     """
     return Estimation.query().join(Project)\
                 .filter(Project.company_id==self.request.context.id)\
                 .filter(extract('year', Estimation.taskDate)==self.year)
def _add_business_to_all_invoices(session):
    """
    Add a Business entry to all invoices
    """
    from autonomie.models.task import (
        Estimation, Invoice,
    )
    logger.debug(u"Adding business to estimations")
    eindex = 0
    iindex = 0
    for e in Estimation.query().options(
        sa.orm.load_only('id', 'name', 'business_type_id', 'project_id')
    ):
        eindex += 1
        invoices = Invoice.query().options(
            sa.orm.load_only('id')
        ).filter_by(estimation_id=e.id).all()
        if invoices:
            business = e.gen_business()
            for deadline in business.payment_deadlines:
                deadline.invoiced = True
                session.merge(deadline)

            for invoice in invoices:
                iindex += 1
                op.execute(
                    u"update task set business_id=%s where id=%s" % (
                        business.id,
                        invoice.id
                    )
                )
                op.execute(
                    u"update task join cancelinvoice as c on c.id=task.id "
                    u"set task.business_id=%s where c.invoice_id=%s" % (
                        business.id,
                        invoice.id
                    )
                )
    logger.debug(" + %s estimations treated" % eindex)
    logger.debug(" + %s invoices treated" % iindex)

    logger.debug(u"Adding business to direct invoices")
    iindex = 0
    for invoice in Invoice.query().options(
        sa.orm.load_only('id', 'name', 'business_type_id', 'project_id')
    ).filter_by(estimation_id=None):
        iindex += 1
        business = invoice.gen_business()

        op.execute(
            u"update task join cancelinvoice as c on c.id=task.id "
            u"set task.business_id=%s where c.invoice_id=%s" % (
                business.id,
                invoice.id
            )
        )
    logger.debug(" + %s invoices treated" % iindex)

    session.flush()
Ejemplo n.º 9
0
def deferred_estimation_widget(node, kw):
    """
    Return a select for estimation selection
    """
    query = Estimation.query()
    query = query.filter_by(project_id=kw['request'].context.project_id)
    choices = [(e.id, e.name) for e in query]
    choices.insert(0, ('', 'Aucun devis'))
    return deform.widget.SelectWidget(values=choices)
Ejemplo n.º 10
0
def deferred_estimation_widget(node, kw):
    """
    Return a select for estimation selection
    """
    query = Estimation.query()
    query = query.filter_by(project_id=kw['request'].context.project_id)
    choices = [(e.id, e.name) for e in query]
    choices.insert(0, ('', 'Aucun devis'))
    return deform.widget.SelectWidget(values=choices)
Ejemplo n.º 11
0
def estimation():
    est = Estimation(**ESTIMATION)
    for line in LINES:
        est.lines.append(EstimationLine(**line))
    for line in DISCOUNTS:
        est.discounts.append(DiscountLine(**line))
    for line in PAYMENT_LINES:
        est.payment_lines.append(PaymentLine(**line))
    return est
Ejemplo n.º 12
0
 def submit_success(self, appstruct):
     estimation_id = appstruct.get('estimation_id')
     self.context.estimation_id = estimation_id
     if estimation_id is not None:
         estimation = Estimation.get(estimation_id)
         estimation.geninv = True
         self.request.dbsession.merge(estimation)
     self.request.dbsession.merge(self.context)
     return self.redirect()
Ejemplo n.º 13
0
 def submit_success(self, appstruct):
     estimation_id = appstruct.get('estimation_id')
     self.context.estimation_id = estimation_id
     if estimation_id is not None:
         estimation = Estimation.get(estimation_id)
         estimation.geninv = True
         self.request.dbsession.merge(estimation)
     self.request.dbsession.merge(self.context)
     return self.redirect()
Ejemplo n.º 14
0
def estimation(project, user, customer, company, phase):
    est = Estimation(
        company,
        customer,
        project,
        phase,
        user,
    )
    for key, value in ESTIMATION.items():
        setattr(est, key, value)
    for line in LINES:
        est.add_line(TaskLine(**line))
    for line in DISCOUNTS:
        est.discounts.append(DiscountLine(**line))
    for line in PAYMENT_LINES:
        est.payment_lines.append(PaymentLine(**line))
    est.mentions = [
        TaskMention(label='mention1', title='title1', full_text='text1')
    ]
    return est
Ejemplo n.º 15
0
def estimation(project, user, customer, company, phase):
    est = Estimation(
        company,
        customer,
        project,
        phase,
        user,
    )
    for key, value in TASK.items():
        setattr(est, key, value)
    return est
Ejemplo n.º 16
0
 def get_waiting_estimations(cls, *args):
     from autonomie.models.task import Estimation
     query = Estimation.query(*args)
     query = query.filter(Estimation.status == 'wait')
     query = query.order_by(Estimation.status_date)
     return query
Ejemplo n.º 17
0
def test_set_name():
    est = Estimation()
    est.set_sequence_number(5)
    est.set_name()
    assert est.name == u"Devis 5"
Ejemplo n.º 18
0
def test_set_name():
    est = Estimation()
    est.set_sequence_number(5)
    est.set_name()
    assert est.name == u"Devis 5"
Ejemplo n.º 19
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.º 20
0
 def test_set_name(self):
     est = Estimation()
     est.set_sequenceNumber(5)
     est.set_name()
     self.assertEqual(est.name, u"Devis 5")
Ejemplo n.º 21
0
 def get_waiting_estimations(cls, *args):
     from autonomie.models.task import Estimation
     query = Estimation.query(*args)
     query = query.filter(Estimation.status == 'wait')
     query = query.order_by(Estimation.status_date)
     return query