Example #1
0
def migrate_datas():
    from autonomie_base.models.base import DBSESSION
    from autonomie.models.config import Config
    session = DBSESSION()
    from alembic.context import get_bind
    conn = get_bind()

    initial_values = [
        ('bookentry_facturation_label_template',
         '{invoice.customer.label} {company.name}'),
        ('bookentry_contribution_label_template',
         "{invoice.customer.label} {company.name}"),
        ('bookentry_rg_interne_label_template',
         "RG COOP {invoice.customer.label} {company.name}"),
        ('bookentry_rg_client_label_template',
         "RG {invoice.customer.label} {company.name}"),
        ('bookentry_expense_label_template',
         "{beneficiaire}/frais {expense_date:%-m %Y}"),
        ('bookentry_payment_label_template',
         "{company.name} / Rgt {invoice.customer.label}"),
        ('bookentry_expense_payment_main_label_template',
         "{beneficiaire_LASTNAME} / REMB FRAIS {expense_date:%B/%Y}"),
        ('bookentry_expense_payment_waiver_label_template',
         "Abandon de créance {beneficiaire_LASTNAME} {expense_date:%B/%Y}"),
    ]

    for key, val in initial_values:
        Config.set(key, val)
Example #2
0
def populate_accounting_treasury_measure_types(session):
    """
    Populate the database with treasury measure types
    """
    from autonomie.models.config import Config
    from autonomie.models.accounting.treasury_measures import (
        TreasuryMeasureType,
    )
    if session.query(TreasuryMeasureType.id).count() == 0:
        for internal_id, start, label in (
            (1, '5', u"Trésorerie du jour",),
            (2, "42,-421,-425,43,44", u"Impôts, taxes et cotisations dues",),
            (3, "40", u"Fournisseurs à payer",),
            (5, "421", u"Salaires à payer",),
            (6, "41", u"Clients à encaisser"),
            (7, '425', u"Notes de dépenses à payer"),
            (9, "1,2,3", u"Comptes bilan non pris en compte"),
        ):
            session.add(
                TreasuryMeasureType(
                    internal_id=internal_id, account_prefix=start, label=label
                )
            )
        Config.set("treasury_measure_ui", "1")
        session.flush()
def migrate_datas():
    from autonomie_base.models.base import DBSESSION
    session = DBSESSION()
    from alembic.context import get_bind
    conn = get_bind()
    from autonomie.models.config import Config
    Config.set('accounting_label_maxlength', 35)
    session.flush()
Example #4
0
 def submit_success(self, appstruct):
     """
         Insert config informations into database
     """
     for key, value in appstruct.items():
         Config.set(key, value)
     self.request.session.flash(self.validation_msg)
     return HTTPFound(self.request.route_path(self.route_name))
Example #5
0
 def submit_success(self, appstruct):
     """
         Insert config informations into database
     """
     for key, value in appstruct.items():
         Config.set(key, value)
     self.request.session.flash(self.validation_msg)
     return HTTPFound(self.request.route_path(self.route_name))
def test_global_invoice_sequence_initialization(
        invoice,
        set_global_seq_index,
):
    from autonomie.models.config import Config
    Config.set('global_sequence_init_value', 12)

    assert GlobalInvoiceSequence.get_next_index(invoice) == 13

    # ignore initialization if there is an actual SequenceNumber
    set_global_seq_index(index=20)
    assert GlobalInvoiceSequence.get_next_index(invoice) == 21
def test_global_invoice_sequence_initialization(
    invoice,
    set_global_seq_index,
):
    from autonomie.models.config import Config
    Config.set('global_sequence_init_value', 12)

    assert GlobalInvoiceSequence.get_next_index(invoice) == 13

    # ignore initialization if there is an actual SequenceNumber
    set_global_seq_index(index=20)
    assert GlobalInvoiceSequence.get_next_index(invoice) == 21
Example #8
0
    def submit_success(self, appstruct):
        """
            Insert config informations into database
        """
        # la table config étant un stockage clé valeur
        # le merge_session_with_post ne peut être utilisé
        logo = appstruct.pop('logo', None)
        if logo:
            ConfigFiles.set('logo.png', logo)
            self.request.session.pop('substanced.tempstore')
            self.request.session.changed()

        for key, value in appstruct.items():
            Config.set(key, value)
        self.request.session.flash(self.validation_msg)
        return HTTPFound(self.request.route_path(self.route_name))
Example #9
0
    def store_pdf_conf(self, appstruct, data_type):
        """
        Store the pdf configuration for the given type

        :param dict appstruct: The datas in which we will find the pdf
        configuration
        :param str data_type: activity/workshop
        """
        pdf_appstruct = appstruct
        for file_type in ("header_img", "footer_img"):
            file_datas = pdf_appstruct.get(file_type)
            if file_datas:
                file_name = "%s_%s.png" % (data_type, file_type)
                ConfigFiles.set(file_name, file_datas)

        Config.set("%s_footer" % data_type, pdf_appstruct.get('footer', ''))
Example #10
0
def content(connection, settings):
    """
    sets up some default content
    """
    from transaction import commit
    from autonomie_base.models.base import (
        DBBASE, )
    metadata = DBBASE.metadata

    metadata.drop_all(connection.engine)
    from autonomie.models import adjust_for_engine
    adjust_for_engine(connection.engine)
    metadata.create_all(connection.engine)

    from autonomie.models.config import Config
    Config.set('invoice_number_template', '{SEQYEAR}')
    commit()
Example #11
0
def content(connection, settings):
    """
    sets up some default content
    """
    from transaction import commit
    from autonomie_base.models.base import (
        DBBASE,
    )
    metadata = DBBASE.metadata

    metadata.drop_all(connection.engine)
    from autonomie.models import adjust_for_engine
    adjust_for_engine(connection.engine)
    metadata.create_all(connection.engine)

    from autonomie.models.config import Config
    Config.set('invoice_number_template', '{SEQYEAR}')
    commit()
def migrate_datas():
    from autonomie_base.models.base import DBSESSION
    from autonomie.models.config import Config
    session = DBSESSION()
    from alembic.context import get_bind
    conn = get_bind()

    initial_values = [
        (
            'bookentry_facturation_label_template',
            '{invoice.customer.label} {company.name}'
        ),
        (
            'bookentry_contribution_label_template',
            "{invoice.customer.label} {company.name}"
        ),
        (
            'bookentry_rg_interne_label_template',
            "RG COOP {invoice.customer.label} {company.name}"
        ),
        (
            'bookentry_rg_client_label_template',
            "RG {invoice.customer.label} {company.name}"
        ),
        (
            'bookentry_expense_label_template',
            "{beneficiaire}/frais {expense_date:%-m %Y}"
        ),
        (
            'bookentry_payment_label_template',
            "{company.name} / Rgt {invoice.customer.label}"
        ),
        (
            'bookentry_expense_payment_main_label_template',
            "{beneficiaire_LASTNAME} / REMB FRAIS {expense_date:%B/%Y}"
        ),
        (
            'bookentry_expense_payment_waiver_label_template',
            "Abandon de créance {beneficiaire_LASTNAME} {expense_date:%B/%Y}"
        ),
    ]

    for key, val in initial_values:
        Config.set(key, val)
Example #13
0
    def store_pdf_conf(self, appstruct, data_type):
        """
        Store the pdf configuration for the given type

        :param dict appstruct: The datas in which we will find the pdf
        configuration
        :param str data_type: activity/workshop
        """
        pdf_appstruct = appstruct
        for file_type in ("header_img", "footer_img"):
            file_datas = pdf_appstruct.get(file_type)
            if file_datas:
                file_name = "%s_%s.png" % (data_type, file_type)
                ConfigFiles.set(file_name, file_datas)

        Config.set(
            "%s_footer" % data_type,
            pdf_appstruct.get('footer', '')
        )
Example #14
0
def test_month_invoice_sequence_initialization(
    mk_invoice,
    set_month_seq_index,
):
    MIS = MonthInvoiceSequence

    from autonomie.models.config import Config
    Config.set('month_sequence_init_value', 12)
    Config.set('month_sequence_init_date', date(2017, 2, 1))

    # month with initialization
    assert MIS.get_next_index(mk_invoice(date=date(2017, 2, 1))) == 13

    # month without initialization
    assert MIS.get_next_index(mk_invoice(date=date(2017, 3, 1))) == 1

    # ignore initialization if there is an actual SequenceNumber
    set_month_seq_index(index=20, year=2017, month=2)
    assert MIS.get_next_index(mk_invoice(date=date(2017, 2, 1))) == 21
Example #15
0
def test_year_invoice_sequence_initialization(
    mk_invoice,
    set_year_seq_index,
):
    YIS = YearInvoiceSequence

    from autonomie.models.config import Config
    Config.set('year_sequence_init_value', 12)
    Config.set('year_sequence_init_date', date(2017, 2, 1))

    # year with initialization
    assert YIS.get_next_index(mk_invoice(date=date(2017, 6, 1))) == 13

    # year without initialization
    assert YIS.get_next_index(mk_invoice(date=date(2018, 3, 1))) == 1

    # ignore initialization if there is an actual SequenceNumber
    set_year_seq_index(index=20, year=2017)
    assert YIS.get_next_index(mk_invoice(date=date(2017, 2, 1))) == 21
def test_year_invoice_sequence_initialization(
        mk_invoice,
        set_year_seq_index,
):
    YIS = YearInvoiceSequence

    from autonomie.models.config import Config
    Config.set('year_sequence_init_value', 12)
    Config.set('year_sequence_init_date', date(2017, 2, 1))

    # year with initialization
    assert YIS.get_next_index(mk_invoice(date=date(2017, 6, 1))) == 13

    # year without initialization
    assert YIS.get_next_index(mk_invoice(date=date(2018, 3, 1))) == 1

    # ignore initialization if there is an actual SequenceNumber
    set_year_seq_index(index=20, year=2017)
    assert YIS.get_next_index(mk_invoice(date=date(2017, 2, 1))) == 21
def test_month_invoice_sequence_initialization(
        mk_invoice,
        set_month_seq_index,
):
    MIS = MonthInvoiceSequence

    from autonomie.models.config import Config
    Config.set('month_sequence_init_value', 12)
    Config.set('month_sequence_init_date', date(2017, 2, 1))

    # month with initialization
    assert MIS.get_next_index(mk_invoice(date=date(2017, 2, 1))) == 13

    # month without initialization
    assert MIS.get_next_index(mk_invoice(date=date(2017, 3, 1))) == 1

    # ignore initialization if there is an actual SequenceNumber
    set_month_seq_index(index=20, year=2017, month=2)
    assert MIS.get_next_index(mk_invoice(date=date(2017, 2, 1))) == 21
Example #18
0
def populate_bookentry_config(session):
    from autonomie.models.config import Config
    initial_values = [
        (
            'bookentry_facturation_label_template',
            '{invoice.customer.label} {company.name}'
        ),
        (
            'bookentry_contribution_label_template',
            "{invoice.customer.label} {company.name}"
        ),
        (
            'bookentry_rg_interne_label_template',
            "RG COOP {invoice.customer.label} {company.name}"
        ),
        (
            'bookentry_rg_client_label_template',
            "RG {invoice.customer.label} {company.name}"
        ),
        (
            'bookentry_expense_label_template',
            "{beneficiaire}/frais {expense_date:%-m %Y}"
        ),
        (
            'bookentry_payment_label_template',
            "{company.name} / Rgt {invoice.customer.label}"
        ),
        (
            'bookentry_expense_payment_main_label_template',
            "{beneficiaire_LASTNAME} / REMB FRAIS {expense_date:%B/%Y}"
        ),
        (
            'bookentry_expense_payment_waiver_label_template',
            "Abandon de créance {beneficiaire_LASTNAME} {expense_date:%B/%Y}"
        ),

    ]

    for key, val in initial_values:
        Config.set(key, val)
Example #19
0
def populate_accounting_treasury_measure_types(session):
    """
    Populate the database with treasury measure types
    """
    from autonomie.models.config import Config
    from autonomie.models.accounting.treasury_measures import (
        TreasuryMeasureType, )
    if session.query(TreasuryMeasureType.id).count() == 0:
        for internal_id, start, label in (
            (
                1,
                '5',
                u"Trésorerie du jour",
            ),
            (
                2,
                "42,-421,-425,43,44",
                u"Impôts, taxes et cotisations dues",
            ),
            (
                3,
                "40",
                u"Fournisseurs à payer",
            ),
            (
                5,
                "421",
                u"Salaires à payer",
            ),
            (6, "41", u"Clients à encaisser"),
            (7, '425', u"Notes de dépenses à payer"),
            (9, "1,2,3", u"Comptes bilan non pris en compte"),
        ):
            session.add(
                TreasuryMeasureType(internal_id=internal_id,
                                    account_prefix=start,
                                    label=label))
        Config.set("treasury_measure_ui", "1")
        session.flush()
Example #20
0
def populate_bookentry_config(session):
    from autonomie.models.config import Config
    initial_values = [
        ('bookentry_facturation_label_template',
         '{invoice.customer.label} {company.name}'),
        ('bookentry_contribution_label_template',
         "{invoice.customer.label} {company.name}"),
        ('bookentry_rg_interne_label_template',
         "RG COOP {invoice.customer.label} {company.name}"),
        ('bookentry_rg_client_label_template',
         "RG {invoice.customer.label} {company.name}"),
        ('bookentry_expense_label_template',
         "{beneficiaire}/frais {expense_date:%-m %Y}"),
        ('bookentry_payment_label_template',
         "{company.name} / Rgt {invoice.customer.label}"),
        ('bookentry_expense_payment_main_label_template',
         "{beneficiaire_LASTNAME} / REMB FRAIS {expense_date:%B/%Y}"),
        ('bookentry_expense_payment_waiver_label_template',
         "Abandon de créance {beneficiaire_LASTNAME} {expense_date:%B/%Y}"),
    ]

    for key, val in initial_values:
        Config.set(key, val)
Example #21
0
def test_sage_csv_writer(dbsession):
    class TestCSVWriter(SageCsvWriter):
        headers = (
            {'name': 'libelle', 'label': 'test libelle'},
        )

    def mk_test_csv_writer():
        request = Mock()
        request.config = Config
        w = TestCSVWriter(request=request, context=None)
        w.set_datas([
            {'libelle': '123456789'},
        ])
        return w

    # default (no conf)
    buf = mk_test_csv_writer().render(StringIO.StringIO())
    buf.readline()  # header
    assert buf.readline().strip() == '"123456789"'

    # zero
    Config.set('accounting_label_maxlength', '0')
    buf = mk_test_csv_writer().render(StringIO.StringIO())
    buf.readline()  # header
    assert buf.readline().strip() == '"123456789"'

    # lower than size
    Config.set('accounting_label_maxlength', '1')
    buf = mk_test_csv_writer().render(StringIO.StringIO())
    buf.readline()  # header
    assert buf.readline().strip() == '"1"'

    # bigger than size
    Config.set('accounting_label_maxlength', '11')
    buf = mk_test_csv_writer().render(StringIO.StringIO())
    buf.readline()  # header
    assert buf.readline().strip() == '"123456789"'
def upgrade():
    from autonomie_base.models.base import DBSESSION
    from autonomie.models.workshop import WorkshopAction
    from alembic.context import get_bind
    session = DBSESSION()
    conn = get_bind()

    col = sa.Column('activity_id', sa.Integer(),
                    sa.ForeignKey('company_activity.id'))
    op.add_column('company_datas', col)
    col = sa.Column('archived',
                    sa.Boolean(),
                    default=False,
                    server_default="0")
    op.add_column('customer', col)

    # Migration de accompagnement_header.png en activity_header.png
    op.execute(
        'update config_files set config_files.key="activity_header_img.png" where \
config_files.key="accompagnement_header.png";')

    # Le bas de page des pdfs est celui par defaut pour les ateliers et rdv
    from autonomie.models.config import Config
    val = Config.get('coop_pdffootertext').value
    if val:
        for key in ('activity', 'workshop'):
            config_key = '%s_footer' % key
            config = Config.set(config_key, val)

    # Migration de la taille des libelles pour les actions des rendez-vous
    op.execute("alter table activity_action modify label VARCHAR(255)")
    # Migration des intitules des ateliers
    # 1- Ajout des nouvelles foreignkey
    for name in 'info1_id', 'info2_id', 'info3_id':
        col = sa.Column(name, sa.Integer, sa.ForeignKey("workshop_action.id"))
        op.add_column("workshop", col)

    # 2- création des options en fonction des valeurs en durs
    request = "select id, info1, info2, info3 from workshop"
    result = conn.execute(request)

    already_added = {}

    for id, info1, info2, info3 in result:
        info1 = info1.lower()
        info2 = info2.lower()
        info3 = info3.lower()
        info1_id = info2_id = info3_id = None
        if (info1, info2, info3) not in already_added.keys():

            for key, value in already_added.items():
                if key[0] == info1 and info1:
                    info1_id = value[0]
                    if key[1] == info2 and info2:
                        info2_id = value[1]

            if info1_id is None and info1:
                w = WorkshopAction(label=info1)
                session.add(w)
                session.flush()
                info1_id = w.id

            if info2_id is None and info2:
                w = WorkshopAction(label=info2, parent_id=info1_id)
                session.add(w)
                session.flush()
                info2_id = w.id

            if info3:
                w = WorkshopAction(label=info3, parent_id=info2_id)
                session.add(w)
                session.flush()
                info3_id = w.id
            already_added[(info1, info2, info3)] = (
                info1_id,
                info2_id,
                info3_id,
            )
        else:
            info1_id, info2_id, info3_id = already_added[(info1, info2, info3)]

        request = "update workshop "
        if info1_id:
            request += "set info1_id={0}".format(info1_id)
            if info2_id:
                request += ", info2_id={0}".format(info2_id)
                if info3_id:
                    request += ", info3_id={0}".format(info3_id)
            request += " where id={0}".format(id)
            op.execute(request)
Example #23
0
    def _an_config(self):
        from autonomie.models.config import Config, ConfigFiles

        Config.set('cae_admin_mail', self.faker.ascii_safe_email())
        Config.set('welcome', self.faker.sentence(nb_words=15))
        ConfigFiles.set(
            'logo.png', {
                'data':
                pkg_resources.resource_stream('autonomie',
                                              'static/img/autonomie.jpg'),
                'filename':
                'logo.jpg',
            })
        Config.set('coop_cgv', self.faker.paragraph(nb_sentences=40))
        Config.set(
            'coop_pdffootertitle', u"""Une activité de ma CAE SARL SCOP à \
capital variable""")
        Config.set(
            'coop_pdffootercourse',
            u"""Organisme de formation N° de déclaration \
d'activité au titre de la FPC : xx xx xxxxx. MA CAE est exonérée de TVA pour \
les activités s'inscrivant dans le cadre de la formation professionnelle \
conformément à l'art. L920-4 du Code du travail et de l'art. 202 C de \
l'annexe II du code général des impôts""")
        footer = u"""RCS XXXX 000 000 000 00000 - SIRET 000 \
000 000 000 00 - Code naf 0000Z TVA INTRACOM : FR0000000. Siège social : 10 \
rue vieille 23200 Aubusson"""
        Config.set('coop_pdffootercontent', footer)
        Config.set('coop_pdffootertext', footer)
        Config.set(
            'coop_invoicepayment', u"""Par chèque libellé à l'ordre de : \
MA CAE/ %ENTREPRENEUR%
à envoyer à l'adresse suivante :
MA CAE/ %ENTREPRENEUR%
10 rue Vieille
23200 Aubusson

Ou par virement sur le compte de MA CAE/ %ENTREPRENEUR%
MA BANQUE
RIB : xxxxx xxxx xxxxxxxxxxxxx
IBAN : xxxx xxxx xxxx xxxx xxxx xxxx xxx
BIC : MABAFRMACAXX
Merci d'indiquer le numéro de facture sur le libellé de votre virement ou \
dos de votre chèque.
""")
        Config.set(
            "coop_invoicelate",
            u"""Tout retard de paiement entraînera à titre de \
clause pénale, conformément à la loi 92.1442 du 31 décembre 1992, une \
pénalité égale à un taux d'intérêt équivalent à une fois et demi le taux \
d'intérêt légal en vigueur à cette échéance.
Une indemnité de 40 euros forfaitaire sera demandée en sus pour chaque \
facture payée après l’échéance fixée. Celle-ci n’est pas soumise à TVA.""")

        Config.set("activity_footer", footer)

        Config.set('workshop_footer', footer)
Example #24
0
    def _an_config(self):
        from autonomie.models.config import Config, ConfigFiles

        Config.set('cae_admin_mail', self.faker.ascii_safe_email())
        Config.set('welcome', self.faker.sentence(nb_words=15))
        ConfigFiles.set(
            'logo.png',
            {
                'data': pkg_resources.resource_stream(
                    'autonomie',
                    'static/img/autonomie.jpg'
                ),
                'filename': 'logo.jpg',
            }
        )
        Config.set('coop_cgv', self.faker.paragraph(nb_sentences=40))
        Config.set('coop_pdffootertitle', u"""Une activité de ma CAE SARL SCOP à \
capital variable""")
        Config.set('coop_pdffootercourse', u"""Organisme de formation N° de déclaration \
d'activité au titre de la FPC : xx xx xxxxx. MA CAE est exonérée de TVA pour \
les activités s'inscrivant dans le cadre de la formation professionnelle \
conformément à l'art. L920-4 du Code du travail et de l'art. 202 C de \
l'annexe II du code général des impôts""")
        footer = u"""RCS XXXX 000 000 000 00000 - SIRET 000 \
000 000 000 00 - Code naf 0000Z TVA INTRACOM : FR0000000. Siège social : 10 \
rue vieille 23200 Aubusson"""
        Config.set('coop_pdffootercontent', footer)
        Config.set('coop_pdffootertext', footer)
        Config.set('coop_invoicepayment', u"""Par chèque libellé à l'ordre de : \
MA CAE/ %ENTREPRENEUR%
à envoyer à l'adresse suivante :
MA CAE/ %ENTREPRENEUR%
10 rue Vieille
23200 Aubusson

Ou par virement sur le compte de MA CAE/ %ENTREPRENEUR%
MA BANQUE
RIB : xxxxx xxxx xxxxxxxxxxxxx
IBAN : xxxx xxxx xxxx xxxx xxxx xxxx xxx
BIC : MABAFRMACAXX
Merci d'indiquer le numéro de facture sur le libellé de votre virement ou \
dos de votre chèque.
""")
        Config.set("coop_invoicelate", u"""Tout retard de paiement entraînera à titre de \
clause pénale, conformément à la loi 92.1442 du 31 décembre 1992, une \
pénalité égale à un taux d'intérêt équivalent à une fois et demi le taux \
d'intérêt légal en vigueur à cette échéance.
Une indemnité de 40 euros forfaitaire sera demandée en sus pour chaque \
facture payée après l’échéance fixée. Celle-ci n’est pas soumise à TVA.""")

        Config.set("activity_footer", footer)

        Config.set('workshop_footer', footer)
Example #25
0
def populate_invoice_number_template(session):
    from autonomie.models.config import Config
    if not Config.get_value("invoice_number_template"):
        Config.set("invoice_number_template", "{SEQGLOBAL}")
    session.flush()
def upgrade():
    from autonomie.models import DBSESSION
    from autonomie.models.workshop import WorkshopAction
    from alembic.context import get_bind

    session = DBSESSION()
    conn = get_bind()

    col = sa.Column("activity_id", sa.Integer(), sa.ForeignKey("company_activity.id"))
    op.add_column("company_datas", col)
    col = sa.Column("archived", sa.Boolean(), default=False, server_default="0")
    op.add_column("customer", col)

    # Migration de accompagnement_header.png en activity_header.png
    op.execute(
        'update config_files set config_files.key="activity_header_img.png" where \
config_files.key="accompagnement_header.png";'
    )

    # Le bas de page des pdfs est celui par defaut pour les ateliers et rdv
    from autonomie.models.config import Config

    val = Config.get("coop_pdffootertext").value
    if val:
        for key in ("activity", "workshop"):
            config_key = "%s_footer" % key
            config = Config.set(config_key, val)

    # Migration de la taille des libelles pour les actions des rendez-vous
    op.execute("alter table activity_action modify label VARCHAR(255)")
    # Migration des intitules des ateliers
    # 1- Ajout des nouvelles foreignkey
    for name in "info1_id", "info2_id", "info3_id":
        col = sa.Column(name, sa.Integer, sa.ForeignKey("workshop_action.id"))
        op.add_column("workshop", col)

    # 2- création des options en fonction des valeurs en durs
    request = "select id, info1, info2, info3 from workshop"
    result = conn.execute(request)

    already_added = {}

    for id, info1, info2, info3 in result:
        info1 = info1.lower()
        info2 = info2.lower()
        info3 = info3.lower()
        info1_id = info2_id = info3_id = None
        if (info1, info2, info3) not in already_added.keys():

            for key, value in already_added.items():
                if key[0] == info1 and info1:
                    info1_id = value[0]
                    if key[1] == info2 and info2:
                        info2_id = value[1]

            if info1_id is None and info1:
                w = WorkshopAction(label=info1)
                session.add(w)
                session.flush()
                info1_id = w.id

            if info2_id is None and info2:
                w = WorkshopAction(label=info2, parent_id=info1_id)
                session.add(w)
                session.flush()
                info2_id = w.id

            if info3:
                w = WorkshopAction(label=info3, parent_id=info2_id)
                session.add(w)
                session.flush()
                info3_id = w.id
            already_added[(info1, info2, info3)] = (info1_id, info2_id, info3_id)
        else:
            info1_id, info2_id, info3_id = already_added[(info1, info2, info3)]

        request = "update workshop "
        if info1_id:
            request += "set info1_id={0}".format(info1_id)
            if info2_id:
                request += ", info2_id={0}".format(info2_id)
                if info3_id:
                    request += ", info3_id={0}".format(info3_id)
            request += " where id={0}".format(id)
            op.execute(request)
Example #27
0
def populate_invoice_number_template(session):
    from autonomie.models.config import Config
    if not Config.get_value("invoice_number_template"):
        Config.set("invoice_number_template", "{SEQGLOBAL}")
    session.flush()
Example #28
0
def invoice_base_config(dbsession):
    from autonomie.models.config import Config
    Config.set('invoice_number_template', '{SEQYEAR}')
Example #29
0
def invoice_base_config(dbsession):
    from autonomie.models.config import Config
    Config.set('invoice_number_template', '{SEQYEAR}')
def test_geninvoice_ref504(dbsession, full_estimation):
    from autonomie.models.config import Config
    Config.set('invoice_prefix', 'TEST')
    invoices = full_estimation.gen_invoices(full_estimation.owner)
    for invoice in invoices:
        assert invoice.prefix == 'TEST'