def test_get_next_order(self, dbsession): from autonomie.models.accounting.income_statement_measures import ( IncomeStatementMeasureTypeCategory, ) assert IncomeStatementMeasureTypeCategory.get_next_order() == 0 self.get_them(dbsession) assert IncomeStatementMeasureTypeCategory.get_next_order() == 5
def test_insert(self, dbsession): from autonomie.models.accounting.income_statement_measures import ( IncomeStatementMeasureTypeCategory, ) cats = self.get_them(dbsession) IncomeStatementMeasureTypeCategory.insert(cats[2], 4) assert cats[2].order == 4 assert cats[-1].order == 3
def test_get_by_label(self, dbsession): from autonomie.models.accounting.income_statement_measures import ( IncomeStatementMeasureTypeCategory, ) cats = self.get_them(dbsession) assert IncomeStatementMeasureTypeCategory.get_by_label('label_2') == \ cats[2] assert IncomeStatementMeasureTypeCategory.get_by_label('wrong') is None
def test_reorder(self, dbsession): from autonomie.models.accounting.income_statement_measures import ( IncomeStatementMeasureTypeCategory, ) cats = self.get_them(dbsession) cats[2].order = 15 dbsession.merge(cats[2]) IncomeStatementMeasureTypeCategory.reorder() assert cats[2].order == 4
def populate_accounting_income_statement_measure_types(session): """ Populate the database with treasury measure types """ from autonomie.models.accounting.income_statement_measures import ( IncomeStatementMeasureTypeCategory, ) if IncomeStatementMeasureTypeCategory.query().count() == 0: for order, category in enumerate( (u"Produits", u"Achats", u"Charges", u"Salaires et Cotisations")): session.add( IncomeStatementMeasureTypeCategory(label=category, order=order)) session.flush()
def on_enable(self): """ on enable we set order to 1 """ order = IncomeStatementMeasureTypeCategory.get_next_order() self.context.order = order self.request.dbsession.merge(self.context)
def income_measure_type_category(dbsession): from autonomie.models.accounting.income_statement_measures import ( IncomeStatementMeasureTypeCategory, ) cat = IncomeStatementMeasureTypeCategory(label=u"Produits") dbsession.add(cat) dbsession.flush() return cat
def income_measure_type_categories(dbsession): from autonomie.models.accounting.income_statement_measures import ( IncomeStatementMeasureTypeCategory, ) result = [] for i in (u"Produits", u"Achats"): cat = IncomeStatementMeasureTypeCategory(label=i) dbsession.add(cat) result.append(cat) dbsession.flush() return result
def get_them(self, dbsession): from autonomie.models.accounting.income_statement_measures import ( IncomeStatementMeasureTypeCategory, ) cats = [ IncomeStatementMeasureTypeCategory( label='label_%s' % i, order=i ) for i in range(5) ] for cat in cats: dbsession.add(cat) dbsession.flush() return cats
def __call__(self): navigation = [] for category in IncomeStatementMeasureTypeCategory.get_categories(): label = u'Indicateurs de type %s' % category.label url = self.request.route_path( TYPE_CATEGORY_URL, category_id=category.id, ) navigation.append(dict(label=label, url=url, icon="fa fa-braille")) return dict(title=self.title, help_message=self.help_message, navigation=navigation, breadcrumb=self.breadcrumb, back_link=self.back_link)
def deferred_complexe_total_description(node, kw): categories = ",".join([ i.label for i in IncomeStatementMeasureTypeCategory.get_categories( keys=('label', )) ]) types = ",".join( (i.label for i in IncomeStatementMeasureType.get_types(keys=('label', )))) return u""" Combiner plusieurs catégories et indicateurs au travers d'opérations arithmétiques. Les noms des variables (catégories ou indicateurs) doivent être encadrés de {}. Exemple : {Salaires et Cotisations} + {Charges} / 100. Liste des catégories : %s. Liste des indicateurs : %s""" % (categories, types)
def deferred_complexe_total_description(node, kw): categories = ",".join( [i.label for i in IncomeStatementMeasureTypeCategory.get_categories(keys=('label',)) ] ) types = ",".join(( i.label for i in IncomeStatementMeasureType.get_types(keys=('label',)) )) return u""" Combiner plusieurs catégories et indicateurs au travers d'opérations arithmétiques. Les noms des variables (catégories ou indicateurs) doivent être encadrés de {}. Exemple : {Salaires et Cotisations} + {Charges} / 100. Liste des catégories : %s. Liste des indicateurs : %s""" % (categories, types)
def __call__(self): navigation = [] for category in IncomeStatementMeasureTypeCategory.get_categories(): label = u'Indicateurs de type %s' % category.label url = self.request.route_path( TYPE_CATEGORY_URL, category_id=category.id, ) navigation.append(dict(label=label, url=url, icon="fa fa-braille")) return dict( title=self.title, help_message=self.help_message, navigation=navigation, breadcrumb=self.breadcrumb, back_link=self.back_link )
def __init__(self, grids, types, turnover): if not grids: self.is_void = True else: self.is_void = False self.categories = IncomeStatementMeasureTypeCategory.get_categories() # Month grids stored by month number self.grids = self._grid_by_month(grids) # Types by category id self.types = self._type_by_category(types) self.turnover = turnover # Totals by category_id, by month self.category_totals = self._get_default_category_totals() # Totals by type_ id, by month self.type_totals = self._get_default_type_totals() self.rows = self.compile_rows()
def type_category_list_view(request): """ List categories of Income Statement Measures we can edit """ menus = [] menus.append({ 'label': u"Retour", "route_name": BASE_URL, "title": "", "icon": "fa fa-step-backward", }) for category in IncomeStatementMeasureTypeCategory.get_categories(): label = u'Configuration des indicateurs de type %s' % category.label url = request.route_path( TYPE_CATEGORY_URL, category_id=category.id, ) menus.append(dict(label=label, url=url, icon="fa fa-braille")) return dict( title=u"Configuration des indicateurs de Compte de résultat", help_message=u"""Les indicateurs de comptes de résultat permettent de regrouper les écritures comptables derrière un même libellé afin de les regrouper au sein d'un tableau annuel présentant le compte de résultat de chaque entreprise.<br /> Les indicateurs sont divisés en 4 catégories (dans l'ordre de présentation )<br /> <ul> <li>Produits</li> <li>Achats</li> <li>Charges</li> <li>Salaires et Cotisations</li> </ul> Depuis cette interface, vous pouvez configurer, par catégorie, l'ensemble des indicateurs qui composeront les comptes de résultat de vos entrepreneurs.""", menus=menus)
def get_them(self, dbsession, cat): from autonomie.models.accounting.income_statement_measures import ( IncomeStatementMeasureTypeCategory, IncomeStatementMeasureType, ) cat2 = IncomeStatementMeasureTypeCategory(label='label_2', order=2) dbsession.add(cat2) dbsession.flush() types_ = [ IncomeStatementMeasureType( order=i, label="label_%s" % i, category_id=cat.id ) for i in range(5) ] types_[-1].category_id = cat2.id types_[-1].order = 1 for type_ in types_: dbsession.add(type_) dbsession.flush() return types_
def on_delete(self): """ On disable we reset the order """ IncomeStatementMeasureTypeCategory.reorder()
def __init__(self, *args, **kwargs): AdminCrudListView.__init__(self, *args, **kwargs) self.max_order = IncomeStatementMeasureTypeCategory.get_next_order() - 1
def __init__(self, *args, **kwargs): AdminCrudListView.__init__(self, *args, **kwargs) self.max_order = IncomeStatementMeasureTypeCategory.get_next_order( ) - 1
def test_get_categories(self, dbsession): from autonomie.models.accounting.income_statement_measures import ( IncomeStatementMeasureTypeCategory, ) cats = self.get_them(dbsession) assert IncomeStatementMeasureTypeCategory.get_categories() == cats