Пример #1
0
def account_reconcile(database,
                      lines=2,
                      months=6,
                      config_file=os.environ.get('TRYTOND_CONFIG')):

    pref = config.set_trytond(database=database, config_file=config_file)

    Module = Model.get('ir.module.module')
    Company = Model.get('company.company')

    modules = Module.find([
        ('name', '=', 'account_reconcile'),
    ])
    if not modules:
        print t.bold('Module account_reconcile not found')
        return
    reconcile, = modules
    if reconcile.state != 'installed':
        Module.install([reconcile.id], pref.context)
        Wizard('ir.module.module.install_upgrade').execute('upgrade')

    for company in Company.find([]):
        print t.bold('Start reconcile for company %s (Lines %s, Months %s)' %
                     (company.rec_name, lines, months))
        with pref.set_context({'company': company.id}):
            reconcile = Wizard('account.move_reconcile')
            reconcile.form.max_lines = str(lines)
            reconcile.form.max_months = months
            reconcile.form.start_date = None
            reconcile.form.end_date = None
            reconcile.execute('reconcile')
Пример #2
0
def InitUser():
    Module = Model.get('ir.module.module')
    #party
    (res, ) = Module.find([('name', '=', 'res')])
    Module.install([res.id], config.context)
    Wizard('ir.module.module.install_upgrade').execute('upgrade')

    (ir, ) = Module.find([('name', '=', 'ir')])
    Module.install([ir.id], config.context)
    Wizard('ir.module.module.install_upgrade').execute('upgrade')
Пример #3
0
def crear_company(config, lang):
    """ Crear company. Traer datos de AFIP"""
    Currency = Model.get('currency.currency')
    Company = Model.get('company.company')
    Party = Model.get('party.party')

    # crear company
    # obtener nombre de la compania de un archivo.
    print u'\n>>> creando company...'

    import ConfigParser
    ini_config = ConfigParser.ConfigParser()
    ini_config.read('company.ini')
    currencies = Currency.find([('code', '=', 'ARS')])
    currency, = currencies
    company_config = Wizard('company.company.config')
    company_config.execute('company')
    company = company_config.form
    party = Party(name='NOMBRE COMPANY')
    party.lang = lang
    party.vat_country = 'AR'
    try:
        party.vat_number = ini_config.get('company', 'cuit')
        party.iva_condition = ini_config.get('company', 'iva_condition')
    except Exception,e:
        print 'Error: No se ha configurado correctamente company.ini\n'
        raise SystemExit(repr(e))
Пример #4
0
def setup_company(config):
    Party = Model.get('party.party')
    Company = Model.get('company.company')
    Currency = Model.get('currency.currency')
    Country = Model.get('country.country')

    ars, = Currency.find([('code', '=', 'ARS')])
    ar, = Country.find([('code', '=', 'AR')])

    company_config = Wizard('company.company.config')
    company_config.execute('company')
    company = company_config.form
    party = Party(name='Union Papelera Platense')
    party.vat_number = '30709170046'
    party.iva_condition = 'responsable_inscripto'
    party.save()
    company.party = party
    company.currency = ars
    company_config.execute('add')

    # Reload context
    User = Model.get('res.user')
    config._context = User.get_preferences(True, config.context)

    company, = Company.find()
    return company
Пример #5
0
def upgrade_modules(config, modules=None, all=False):
    '''
    Function get from tryton_demo.py in tryton-tools repo:
    http://hg.tryton.org/tryton-tools
    '''
    assert all or modules

    Module = Model.get('ir.module.module')
    if all:
        modules = Module.find([
            ('state', '=', 'installed'),
        ])
    else:
        modules = Module.find([
            ('name', 'in', modules),
            ('state', '=', 'installed'),
        ])

    Module.upgrade([x.id for x in modules], config.context)
    Wizard('ir.module.module.install_upgrade').execute('upgrade')

    ConfigWizardItem = Model.get('ir.module.module.config_wizard.item')
    for item in ConfigWizardItem.find([('state', '!=', 'done')]):
        item.state = 'done'
        item.save()

    upgraded_modules = [
        x.name for x in Module.find([
            ('state', '=', 'to_upgrade'),
        ])
    ]
    return upgraded_modules
Пример #6
0
def install_modules():
    print u'\n>>> instalando modulos...'
    Module = Model.get('ir.module.module')
    modules_to_install=[
        'account_ar',
        'account_voucher_ar',
        'account_check_ar',
        'account_bank_ar',
        'account_retencion_ar',
        'account_coop_ar',
        'company_logo',
        'account_invoice_ar',
        ]
    modules = Module.find([
        ('name', 'in', modules_to_install),
        ])
    for module in modules:
        module.click('install')
    Wizard('ir.module.module.install_upgrade').execute('upgrade')

    print u'\n>>> wizards de configuracion se marcan como done...'
    ConfigWizardItem = Model.get('ir.module.module.config_wizard.item')
    for item in ConfigWizardItem.find([('state', '!=', 'done')]):
        item.state = 'done'
        item.save()
Пример #7
0
def setup_company(config):
    Party = Model.get('party.party')
    Company = Model.get('company.company')
    Currency = Model.get('currency.currency')
    Country = Model.get('country.country')

    ars, = Currency.find([('code', '=', 'ARS')])
    rate = ars.rates.new()
    rate.date = datetime.date(TODAY.year, 1, 1)
    rate.rate = Decimal('44.30')
    ars.save()
    ar, = Country.find([('code', '=', 'AR')])

    company_config = Wizard('company.company.config')
    company_config.execute('company')
    company = company_config.form
    party = Party(name='Cooperativa de Trabajo La Metalurgica LTDA')
    party.vat_number = '30710288565'
    party.iva_condition = 'responsable_inscripto'
    party.save()
    company.party = party
    company.currency = ars
    company_config.execute('add')

    # Reload context
    User = Model.get('res.user')
    config._context = User.get_preferences(True, {})

    company, = Company.find()
    return company
Пример #8
0
def LoadPlanNIIF():
    AccountC = Model.get('account.create_chart.account')
    Company = Model.get('company.company')
    empresa = '1191758435001'
    Template = Model.get('account.account.template')
    Account = Model.get('account.account')
    account = Account()

    account_template = Template.find([('name', '=',
                                       'PLAN DE CUENTAS NIIF ECUADOR'),
                                      ('parent', '=', None)])
    if len(account_template) == 1:
        account_t, = account_template
        account_template = account_t

    if len(Company.find([('party.vat_number', '=', empresa)])) == 1:
        company, = Company.find([('party.vat_number', '=', empresa)])
        company = company

    create_chart = Wizard('account.create_chart')
    create_chart.execute('account')
    create_chart.form.account_template = account_template
    create_chart.form.company = company
    create_chart.execute('create_account')
    print "Created chart account"
Пример #9
0
 def test_translation_clean(self):
     translation_clean = Wizard('ir.translation.clean')
     self.assertEqual(translation_clean.form.__class__.__name__,
             'ir.translation.clean.start')
     translation_clean.execute('clean')
     self.assertEqual(translation_clean.form.__class__.__name__,
         'ir.translation.clean.succeed')
Пример #10
0
def create_chart(company=None, config=None):
    "Create chart of accounts"
    AccountTemplate = Model.get('account.account.template', config=config)
    ModelData = Model.get('ir.model.data')

    if not company:
        company = get_company()
    data, = ModelData.find([
        ('module', '=', 'account'),
        ('fs_id', '=', 'account_template_root_en'),
    ],
                           limit=1)

    account_template = AccountTemplate(data.db_id)

    create_chart = Wizard('account.create_chart')
    create_chart.execute('account')
    create_chart.form.account_template = account_template
    create_chart.form.company = company
    create_chart.execute('create_account')

    accounts = get_accounts(company, config=config)

    create_chart.form.account_receivable = accounts['receivable']
    create_chart.form.account_payable = accounts['payable']
    create_chart.execute('create_properties')
    return create_chart
Пример #11
0
def install_modules(config, modules):
    '''
    Function get from tryton_demo.py in tryton-tools repo:
    http://hg.tryton.org/tryton-tools
    '''
    Module = Model.get('ir.module.module')
    modules = Module.find([
        ('name', 'in', modules),
        #('state', '!=', 'installed'),
    ])
    Module.install([x.id for x in modules], config.context)
    modules = [
        x.name for x in Module.find([
            ('state', 'in', ('to install', 'to_upgrade')),
        ])
    ]
    Wizard('ir.module.module.install_upgrade').execute('upgrade')

    ConfigWizardItem = Model.get('ir.module.module.config_wizard.item')
    for item in ConfigWizardItem.find([('state', '!=', 'done')]):
        item.state = 'done'
        item.save()

    installed_modules = [
        m.name for m in Module.find([('state', '=', 'installed')])
    ]
    return modules, installed_modules
Пример #12
0
def automatic_reconciliation(database,
                             max_lines=4,
                             config_file=os.environ.get('TRYTOND_CONFIG')):
    """
    Launch Automatic Reconciliation wizard for all databases and years
    """
    if not database:
        return

    print t.bold("Automatic Reconciliation for %s" % database)
    if not check_database(database, {}):
        return

    config = pconfig.set_trytond(database=database, config_file=config_file)
    Company = Model.get('company.company')
    FiscalYear = Model.get('account.fiscalyear')
    User = Model.get('res.user')

    companies = Company.find([])
    fiscal_years = FiscalYear.find([('state', '=', 'open')])

    print(
        "It will reconcile %d companies and %d years. Do you want to "
        "continue? [yN]" % (len(companies), len(fiscal_years)))
    confirmation = sys.stdin.read(1)
    if confirmation != "y":
        return

    user = User(config.user)
    original_company = user.main_company
    for company in companies:
        print "  - Reconcile company %s" % (company.rec_name)
        user.main_company = company
        user.save()
        config._context = User.get_preferences(True, config.context)

        for fiscal_year in FiscalYear.find([
            ('company', '=', company.id),
            ('state', '=', 'open'),
        ]):
            for max_lines in (2, 3, 4):
                print "    - Reconcile year %s using %s lines" % (
                    fiscal_year.name, max_lines)
                automatic_reconcile = Wizard('account.move_reconcile')
                assert automatic_reconcile.form.company == company, \
                    'Unexpected company "%s" (%s)' % (
                        automatic_reconcile.form.company, company)
                # get accounts and parties field to avoid
                # "Model has no attribute 'accounts'" error
                automatic_reconcile.form.accounts
                automatic_reconcile.form.parties
                automatic_reconcile.form.max_lines = str(max_lines)
                automatic_reconcile.form.max_months = 12
                automatic_reconcile.form.start_date = fiscal_year.start_date
                automatic_reconcile.form.end_date = fiscal_year.end_date
                automatic_reconcile.execute('reconcile')

    user.main_company = original_company
    user.save()
Пример #13
0
def prepare_translations(ctx,
                         database,
                         langs=None,
                         host=None,
                         port=None,
                         dbuser=None,
                         dbpassword=None,
                         config_file=os.environ.get('TRYTOND_CONFIG')):
    """
    Runs the set, clean and update translations wizards in the given database.
    """
    print(
        t.bold('prepare_translations: database=%s, langs=%s') %
        (database, langs))
    if not _check_database(database, host, port, dbuser, dbpassword):
        return

    config.set_trytond(database=database, config_file=config_file)

    Lang = Model.get('ir.lang')
    if langs is None:
        languages = Lang.find([
            ('translatable', '=', True),
        ])
    else:
        langs = langs.split(',')
        languages = Lang.find([
            ('code', 'in', langs),
        ])
        if set(langs) != set(l.code for l in languages):
            print(t.bold('Invalid languages: %s') % languages)
            return

    translation_set = Wizard('ir.translation.set')
    translation_set.execute('set_')
    translation_set.execute('end')

    translation_clean = Wizard('ir.translation.clean')
    translation_clean.execute('clean')
    translation_clean.execute('end')

    for language in languages:
        translation_update = Wizard('ir.translation.update')
        translation_update.form.language = language
        translation_update.execute('update')
        print("%s translation updated" % language.name)
Пример #14
0
 def test_translation_export(self):
     Lang = Model.get('ir.lang')
     Module = Model.get('ir.module')
     translation_export = Wizard('ir.translation.export')
     translation_export.form.language, = Lang.find([('code', '=', 'en')])
     translation_export.form.module, = Module.find([('name', '=', 'ir')])
     translation_export.execute('export')
     self.assertTrue(translation_export.form.file)
     translation_export.execute('end')
Пример #15
0
def setup_account_payment(config, modules, company):
    Currency = Model.get('currency.currency')
    Journal = Model.get('account.payment.journal')
    Line = Model.get('account.move.line')
    Payment = Model.get('account.payment')

    usd, = Currency.find([('code', '=', 'USD')])
    journal = Journal(name='Manual',
                      currency=usd,
                      company=company,
                      process_method='manual')
    journal.save()

    lines = Line.find([
        ('account.kind', '=', 'payable'),
        ('party', '!=', None),
        ('reconciliation', '=', None),
        ('payment_amount', '!=', 0),
    ])
    lines = random.sample(lines, len(lines) * 2 // 3)
    if not lines:
        return

    pay_line = Wizard('account.move.line.pay', lines)
    pay_line.form.journal = journal
    pay_line.execute('start')

    payments = Payment.find([])
    payments = random.sample(payments, len(payments) * 2 // 3)

    for payment in payments:
        payment.click('approve')

    payments = random.sample(payments, len(payments) * 2 // 3)
    i = j = 0
    while i < len(payments):
        j = random.randint(1, 5)
        process = Wizard('account.payment.process', payments[i:i + j])
        process.execute('process')
        i += j
def InitDatabase():
    Module = Model.get('ir.module.module')
    inicio = 4

    for i in range(inicio - 1):
        modules.next()

    for index, row in enumerate(modules):
        print row[0]
        name = row[0]
        (module, ) = Module.find([('name', '=', name)])
        Module.install([module.id], config.context)
        Wizard('ir.module.module.install_upgrade').execute('upgrade')
Пример #17
0
    def activate_modules(self, activate_modules):
        Module = Model.get('ir.module')
        available_modules = Module.find([('name', 'in', activate_modules)])

        missing_modules = (set(activate_modules) -
                           set([m.name for m in available_modules]))
        if missing_modules:
            logger.warning("some trytond modules are not available for "
                           "activation: {missing_modules}".format(
                               missing_modules=missing_modules))

        for module in available_modules:
            module.click('activate')
        Wizard('ir.module.activate_upgrade').execute('upgrade')
Пример #18
0
def uninstall_task(database,
                   modules,
                   config_file=os.environ.get('TRYTOND_CONFIG')):
    """
    Uninstall the supplied modules (separated by coma) from database.
    """
    if not database or not modules:
        return

    if isinstance(modules, basestring):
        modules = modules.replace(" ", "").split(',')
    if not modules:
        return

    print t.bold("uninstall: ") + ", ".join(modules)
    if not check_database(database, {}):
        return

    config = pconfig.set_trytond(database=database, config_file=config_file)

    if proteus_version < '3.5':
        Module = Model.get('ir.module.module')
    else:
        Module = Model.get('ir.module')

    modules_to_uninstall = Module.find([('name', 'in', modules),
                                        ('state', '=', 'installed')])
    Module.uninstall([m.id for m in modules_to_uninstall], config.context)

    if proteus_version < '3.5':
        module_install_upgrade = Wizard('ir.module.module.install_upgrade')
    else:
        module_install_upgrade = Wizard('ir.module.install_upgrade')
    module_install_upgrade.execute('upgrade')
    module_install_upgrade.execute('config')
    print ""
Пример #19
0
def create_chart_of_accounts(config,
                             module,
                             fs_id,
                             company,
                             digits=None,
                             receivable_code=None,
                             payable_code=None):
    AccountTemplate = Model.get('account.account.template')
    Account = Model.get('account.account')
    ModelData = Model.get('ir.model.data')

    root_accounts = Account.find([('parent', '=', None)])
    if root_accounts:
        return

    data = ModelData.find([('module', '=', module), ('fs_id', '=', fs_id)],
                          limit=1)

    assert len(data) == 1, ('Unexpected num of root templates '
                            'with name "%s": %s' % (module, fs_id))

    account_template = data[0].db_id

    create_chart = Wizard('account.create_chart')
    create_chart.execute('account')
    create_chart.form.account_template = AccountTemplate(account_template)
    create_chart.form.company = company
    create_chart.form.account_code_digits = digits
    create_chart.execute('create_account')

    receivable_domain = [
        ('kind', '=', 'receivable'),
        ('company', '=', company.id),
    ]
    if receivable_code is not None:
        receivable_domain.append(('code', '=', receivable_code))
    receivable = Account.find(receivable_domain)
    receivable = receivable[0]
    payable_domain = [
        ('kind', '=', 'payable'),
        ('company', '=', company.id),
    ]
    if payable_code is not None:
        payable_domain.append(('code', '=', payable_code))
    payable = Account.find(payable_domain)[0]
    create_chart.form.account_receivable = receivable
    create_chart.form.account_payable = payable
    create_chart.execute('create_properties')
Пример #20
0
def setup_languages(config, modules, demo_password, company=None):
    Lang = Model.get('ir.lang')
    Module = Model.get('ir.module')
    User = Model.get('res.user')
    Group = Model.get('res.group')
    Action = Model.get('ir.action')

    langs = Lang.find([('code', '=', 'es')])
    Lang.write([x.id for x in langs], {
        'translatable': True,
    }, config.context)
    Module.upgrade([x.id for x in Module.find([('name', 'in', modules)])],
                   config.context)
    Wizard('ir.module.activate_upgrade').execute('upgrade')

    admin = config.user
    # Use root to skip password validation
    config.user = 0

    menu, = Action.find([('usage', '=', 'menu')])
    for lang in langs:
        if lang.code == 'en':
            name = 'Demo'
            login = '******'
        else:
            if lang.code[:2] != lang.code[-2:].lower():
                continue
            name = 'Demo %s' % lang.name
            login = '******' % lang.code[:2]
        try:
            user, = User.find([('login', '=', login)])
        except ValueError:
            user = User()
        user.name = name
        user.login = login
        user.password = demo_password
        groups = Group.find([
            ('name', 'not ilike', '%Admin%'),
        ])
        user.groups.extend(groups)
        user.language = lang
        user.menu = menu
        if company:
            user.main_company = company
            user.company = company
        user.save()

    config.user = admin
Пример #21
0
    def test_user_config(self):
        User = Model.get('res.user')

        user_config = Wizard('res.user.config')
        user_config.execute('user')
        user_config.form.name = 'Foo'
        user_config.form.login = '******'
        user_config.execute('add')
        self.assertEqual(user_config.form.name, None)
        self.assertEqual(user_config.form.login, None)
        user_config.form.name = 'Bar'
        user_config.form.login = '******'
        user_config.execute('end')

        self.assertTrue(User.find([('name', '=', 'Foo')]))
        self.assertFalse(User.find([('name', '=', 'Bar')]))
Пример #22
0
def create_company(config,
                   name,
                   street=None,
                   zip=None,
                   city=None,
                   subdivision_code=None,
                   country_code='ES',
                   currency_code='EUR',
                   phone=None,
                   website=None):
    '''
    Based on tryton_demo.py in tryton-tools repo:
    http://hg.tryton.org/tryton-tools
    '''
    Company = Model.get('company.company')
    Currency = Model.get('currency.currency')

    party = create_party(config,
                         name,
                         street=street,
                         zip=zip,
                         city=city,
                         subdivision_code=subdivision_code,
                         country_code=country_code,
                         phone=phone,
                         website=website)

    companies = Company.find([('party', '=', party.id)])
    if companies:
        return companies[0]

    currency, = Currency.find([('code', '=', currency_code)])

    company_config = Wizard('company.company.config')
    company_config.execute('company')
    company = company_config.form
    company.party = party
    company.currency = currency
    company_config.execute('add')

    # Reload context
    User = Model.get('res.user')
    config._context = User.get_preferences(True, config.context)

    company, = Company.find([('party', '=', party.id)])
    return company
Пример #23
0
def install_modules(modules):
    if isinstance(modules, basestring):
        modules = [modules]
    cache_name = '-'.join(modules)
    if restore_db_cache(cache_name):
        return _get_config()
    drop_create()

    cfg = _get_config()
    Module = Model.get('ir.module')
    modules = Module.find([
        ('name', 'in', modules),
    ])
    Module.click(modules, 'install')
    Wizard('ir.module.install_upgrade').execute('upgrade')

    backup_db_cache(cache_name)
    return cfg
Пример #24
0
def activate_modules(modules, cache_file_name=None):
    if isinstance(modules, basestring):
        modules = [modules]
    cache_name = cache_file_name or '-'.join(modules)
    if restore_db_cache(cache_name):
        return _get_config()
    drop_create()
    cfg = _get_config()
    Module = Model.get('ir.module')
    records = Module.find([
        ('name', 'in', modules),
    ])
    assert len(records) == len(modules)
    Module.click(records, 'activate')
    Wizard('ir.module.activate_upgrade').execute('upgrade')

    backup_db_cache(cache_name)
    return cfg
Пример #25
0
def activate_modules(modules):
    if isinstance(modules, basestring):
        modules = [modules]
    cache_name = '-'.join(modules)
    # JCA : restore_db_cache fails if the database already exists
    drop_db()
    if restore_db_cache(cache_name):
        return _get_config()
    create_db()
    cfg = _get_config()
    Module = Model.get('ir.module')
    modules = Module.find([
        ('name', 'in', modules),
    ])
    Module.click(modules, 'activate')
    Wizard('ir.module.activate_upgrade').execute('upgrade')

    backup_db_cache(cache_name)
    return cfg
Пример #26
0
def install_modules(config, modules):
    Module = Model.get('ir.module.module')
    modules = Module.find([
        ('name', 'in', modules),
        ('state', '!=', 'installed'),
    ])
    Module.install([x.id for x in modules], config.context)
    modules = [x.name for x in Module.find([('state', '=', 'to install')])]
    Wizard('ir.module.module.install_upgrade').execute('upgrade')

    ConfigWizardItem = Model.get('ir.module.module.config_wizard.item')
    for item in ConfigWizardItem.find([('state', '!=', 'done')]):
        item.state = 'done'
        item.save()

    installed_modules = [
        m.name for m in Module.find([('state', '=', 'installed')])
    ]
    return modules, installed_modules
Пример #27
0
 def pay_bill(self, id):
     """
     Makes the payment of the bill
     :id: the id of the bill
     :return:boolean True if the value is saved
     """
     newid = id
     try:
         invoice = self.Invoice(id=newid)
         if 'aid' not in invoice.state:  #check if paid
             invoice.click('post')
             pay = Wizard('account.invoice.pay', [invoice])
             pay.form.journal = self.cash_journal
             pay.execute('choice')
             invoice.reload()
         return invoice.state
     except Exception:
         if settings.level == 10:
             logger.exception('raised exception')
         return False
Пример #28
0
def create_chart(company=None, config=None):
    "Create chart of accounts"
    AccountTemplate = Model.get('account.account.template', config=config)

    if not company:
        company = get_company()

    account_template, = AccountTemplate.find([('parent', '=', None)])

    create_chart = Wizard('account.create_chart')
    create_chart.execute('account')
    create_chart.form.account_template = account_template
    create_chart.form.company = company
    create_chart.execute('create_account')

    accounts = get_accounts(company, config=config)

    create_chart.form.account_receivable = accounts['receivable']
    create_chart.form.account_payable = accounts['payable']
    create_chart.execute('create_properties')
    return create_chart
Пример #29
0
def create_company(party=None, currency=None, config=None):
    "Create the company using the proteus config"
    Party = Model.get('party.party', config=config)
    User = Model.get('res.user', config=config)

    company_config = Wizard('company.company.config')
    company_config.execute('company')
    company = company_config.form
    if not party:
        party = Party(name='Dunder Mifflin')
        party.save()
    company.party = party
    if not currency:
        currency = get_currency()
    company.currency = currency
    company_config.execute('add')

    if not config:
        config = get_config()
    config._context = User.get_preferences(True, {})
    return company_config
Пример #30
0
def activate_modules(config, modules):
    Module = Model.get('ir.module')
    modules = Module.find([
            ('name', 'in', modules),
            ])
    for module in modules:
        if module.state == 'activated':
            module.click('upgrade')
        else:
            module.click('activate')
    modules = [x.name for x in Module.find([('state', '=', 'to activate')])]
    Wizard('ir.module.activate_upgrade').execute('upgrade')

    ConfigWizardItem = Model.get('ir.module.config_wizard.item')
    for item in ConfigWizardItem.find([('state', '!=', 'done')]):
        item.state = 'done'
        item.save()

    activated_modules = [m.name
        for m in Module.find([('state', '=', 'activated')])]
    return modules, activated_modules