Example #1
0
    def deferred_customer_widget(node, kw):
        if is_admin:
            query = Customer.query().join(Customer.company)
            query = query.options(
                contains_eager(Customer.company).load_only('name')
            )
            query = query.options(load_only('id', 'label'))

            datas = OrderedDict()

            for item in query:
                datas.setdefault(item.company.name, []).append(
                    (item.id, item.label)
                )

            # All customers, grouped by Company
            for company_name, customers in datas.items():
                values.append(
                    deform.widget.OptGroup(
                        company_name,
                        *customers
                    )
                )
        else:
            # Company customers only
            company = kw['request'].context
            for cust in company.customers:
                values.append(
                    (cust.id, u"%s (%s)" % (cust.name, cust.code))
                )

        return deform.widget.Select2Widget(
            values=values,
            **(widget_options or {})
        )
Example #2
0
def get_customers_from_request(request):
    """
    Get customers options for new task and task duplicate form

    Find customers regarding the current context

    Project -> Project.customers
    ...

    :returns: A list of customers
    :rtype: list
    """
    from autonomie.models.customer import Customer
    from autonomie.models.task import Task
    customers = []
    context = request.context

    if isinstance(context, Project):
        customers = context.customers

    elif isinstance(context, Task):
        customers = [context.customer]

    elif isinstance(context, Customer):
        customers = [context]

    elif hasattr(context, 'project') and context.project is not None:
        customers = context.project.customers

    else:
        company_id = request.current_company
        from autonomie.models.customer import Customer
        customers = Customer.query().filter_by(company_id=company_id).all()

    return customers
Example #3
0
def get_company_customers(kw):
    """
    Retrieve all customers attached to a context's company
    """
    from autonomie.models.customer import Customer
    request = kw['request']
    company_id = request.context.get_company_id()
    return Customer.query().filter_by(company_id=company_id).all()
Example #4
0
    def deferred_customer_widget(node, kw):

        if default_option:
            values = [default_option]
        else:
            values = []
        if is_admin:
            query = Customer.query().join(Customer.company)
            query = query.options(
                contains_eager(Customer.company).load_only('name')
            )
            query = query.options(load_only('id', 'label'))

            if with_invoice:
                query = query.filter(
                    Customer.id.in_(
                        DBSESSION().query(distinct(Task.customer_id)).filter(
                            Task.type_.in_(['invoice', 'cancelinvoice'])
                        )
                    )
                )
            elif with_estimation:
                query = query.filter(
                    Customer.id.in_(
                        DBSESSION().query(distinct(Task.customer_id)).filter(
                            Task.type_ == 'estimation'
                        )
                    )
                )

            datas = OrderedDict()

            for item in query:
                datas.setdefault(item.company.name, []).append(
                    (item.id, item.label)
                )

            # All customers, grouped by Company
            for company_name, customers in datas.items():
                values.append(
                    deform.widget.OptGroup(
                        company_name,
                        *customers
                    )
                )
        else:
            # Company customers only
            company = kw['request'].context
            for cust in company.customers:
                values.append(
                    (cust.id, u"%s (%s)" % (cust.name, cust.code))
                )

        return deform.widget.Select2Widget(
            values=values,
            **(widget_options or {})
        )
def migrate_datas():
    from autonomie_base.models.base import DBSESSION
    session = DBSESSION()
    from autonomie.models.customer import Customer
    for customer in Customer.query().options(
            sa.orm.load_only("id", "name", "lastname", "firstname", "civilite",
                             "type_")):
        customer.label = customer._get_label()
        session.merge(customer)
Example #6
0
    def deferred_customer_widget(node, kw):

        if default_option:
            values = [default_option]
        else:
            values = []
        if is_admin:
            query = Customer.query().join(Customer.company)
            query = query.options(
                contains_eager(Customer.company).load_only('name')
            )
            query = query.options(load_only('id', 'label'))

            if with_invoice:
                query = query.filter(
                    Customer.id.in_(
                        DBSESSION().query(distinct(Task.customer_id)).filter(
                            Task.type_.in_(['invoice', 'cancelinvoice'])
                        )
                    )
                )
            elif with_estimation:
                query = query.filter(
                    Customer.id.in_(
                        DBSESSION().query(distinct(Task.customer_id)).filter(
                            Task.type_ == 'estimation'
                        )
                    )
                )

            datas = OrderedDict()

            for item in query:
                datas.setdefault(item.company.name, []).append(
                    (item.id, item.label)
                )

            # All customers, grouped by Company
            for company_name, customers in datas.items():
                values.append(
                    deform.widget.OptGroup(
                        company_name,
                        *customers
                    )
                )
        else:
            # Company customers only
            company = kw['request'].context
            for cust in company.customers:
                values.append(
                    (cust.id, u"%s (%s)" % (cust.name, cust.code))
                )

        return deform.widget.Select2Widget(
            values=values,
            **(widget_options or {})
        )
Example #7
0
 def customers(self):
     """
         Return the number of real customers (with invoices)
         for the current year
     """
     company_id = self.request.context.id
     result = 0
     customers = Customer.query().filter(Customer.company_id == company_id)
     for customer in customers:
         for invoice in customer.invoices:
             if invoice.financial_year == self.year:
                 if invoice.CAEStatus in Invoice.valid_states:
                     result += 1
                     break
     return result
Example #8
0
 def customers(self):
     """
         Return the number of real customers (with invoices)
         for the current year
     """
     company_id = self.request.context.id
     result = 0
     customers = Customer.query().filter(Customer.company_id==company_id)
     for customer in customers:
         for invoice in customer.invoices:
             if invoice.financial_year == self.year:
                 if invoice.CAEStatus in Invoice.valid_states:
                     result += 1
                     break
     return result
Example #9
0
    def unique_ccode(node, value):
        """
            Test customer code unicity
        """
        if len(value) != 4:
            message = u"Le code client doit contenir 4 caractères."
            raise colander.Invalid(node, message)
        #Test unicity
        query = Customer.query().filter(Customer.company_id == company_id)\
                .filter(Customer.code == value)
        if customer:
            # In edit mode, it will always fail
            query = query.filter(Customer.id != customer.id)
        result = query.all()

        if len(result):
            message = u"Vous avez déjà utilisé ce code '{0}' pour un autre \
client".format(value)
            raise colander.Invalid(node, message)
Example #10
0
def customer(content):
    res = Customer.query().first()
    res.code = "CLI1"
    return res
Example #11
0
 def query(self):
     company = self.request.context
     return Customer.query().filter_by(company_id=company.id)
Example #12
0
 def query(self):
     company = self.request.context
     query = Customer.query().options(undefer_group('edit'))
     return query.filter(Customer.company_id == company.id)
Example #13
0
 def query(self):
     company = self.request.context
     return Customer.query().filter_by(company_id=company.id)
Example #14
0
 def query(self):
     company = self.request.context
     query = Customer.query().options(undefer_group('edit'))
     return query.filter(Customer.company_id == company.id)
def get_individual_customer():
    return Customer.query().filter(Customer.lastname == 'Lastname 2').one()
Example #16
0
def customer(content):
    res = Customer.query().first()
    res.code = "CLI1"
    return res
Example #17
0
def get_individual_customer():
    return Customer.query().filter(Customer.lastname == 'Lastname 2').one()
Example #18
0
def getOne():
    return Customer.query().filter(Customer.name=='Company').one()
Example #19
0
def customer(content):
    res = Customer.query().first()
    return res
Example #20
0
def getOne():
    return Customer.query().filter(Customer.name == 'Company').one()
Example #21
0
def customer(content):
    res = Customer.query().first()
    return res