Блог на Odoo България - Odoo България - Odoo България https://www.odoo.bg Thu, 28 Mar 2024 16:15:09 +0200 Joomla! - Open Source Content Management bg-bg Odoo Automated Backups и версията на pysftp https://www.odoo.bg/блог/item/224-odoo-automated-backups-и-версията-на-pysftp https://www.odoo.bg/блог/item/224-odoo-automated-backups-и-версията-на-pysftp Odoo  Automated Backups и версията на pysftp

За Odoo има един много полезен модул, Automated Backups, който прави бекъп на базата и файлоwете към нея в компресиран файл локално или на друг сървър по ssh. Модула ползва библиотеката pysftp. Ако е инсталирана версия 0.2.9, при опит за свързване с отдалечения сървър, дава грешка, че няма частен ключ, въпреки че е зададена парола, а полето за ключ е празно. Проблема се решава, като се инсталира по-старата версия на styp 0.2.8. Дискусията по проблема е тук.

pip install pysftp==0.2.8

Не трябва да забравяте да добавите и публичния ключ на сървъра, на който ще записвате бекъпа. Например:

sudo -u odoo ssh root@192.168.1.190 - 192.168.1.190 е IP адреса или FQDN на сървъра за бекъп

В допълнение може да се добави и модула Database Auto-Backup Download, който позволява да свалите бекъп директно от Odoo.

]]>
office@odoo.bg (Васил Тумбев) Odoo 8 Thu, 13 Jul 2017 10:14:14 +0300
Python script, който създава текстов файл с инсталирани модули https://www.odoo.bg/блог/item/223-python-script,-който-създава-текстов-файл-с-инсталирани-модули https://www.odoo.bg/блог/item/223-python-script,-който-създава-текстов-файл-с-инсталирани-модули Python script, който създава текстов файл с инсталирани модули

Често в практиката се налага една база данни да се клонира като тестова от основната, на която не се правят тестови сделки. Какво се случва обаче, ако тестовата база се "счупи". Клонираме отново и добавяме липсващите модули. Ако няма как да видим кои са и не е възможно да ги помним, понеже са поне 100 допълнително, какво да правим?

На помощ идва един скрипт написан на python, който създава в текстов файл списък от инсталираните модули в конкретна база данни. Скрипта можете да свалите от тук. Можете да го свалите направо на вашия сървър с

wget http://www.openerp.bg/odoo_configuration_reader.py

Резултата от скрипта е текстов файл, например - 20161115-100450_installed_modules.txt

Version: 8.0
asset
asset_account
asset_mrp
asset_purchase
asset_sale
asset_stock
mro
mro_pm
sales_report_product_image
crm
hr_payroll_timesheet
hr_timesheet_employee
mail
account_voucher
project
note
project_issue
account_accountant
mrp_plan_wizard
survey
base_currency_inverse_rate
crm_partner_history
product_price_currency
product_price_currency_margin
product_pricelist
product_replenishment_cost_currency
product_sale_price_by_margin
.....
bus_enhanced
web_action_request
web_notification

]]>
office@odoo.bg (администратор) Odoo 8 Mon, 20 Feb 2017 20:21:48 +0200
Списък от Python библиотеки за коректната работа на Odoo 8 и външни модули (dependencies) https://www.odoo.bg/блог/item/222-списък-от-python-библиотеки-за-коректната-работа-на-odoo-8-и-външни-модули-dependencies https://www.odoo.bg/блог/item/222-списък-от-python-библиотеки-за-коректната-работа-на-odoo-8-и-външни-модули-dependencies Списък от Python библиотеки за коректната работа на Odoo 8 и външни модули (dependencies)

По долу ще ви предоставя списък от Python библиотеки за коректната работа на Odoo 8 и външни модули, известен повече като dependencies. В официалната документация много от задължителните библиотеки липсват. Например файла /opt/odoo/odoo/requirements.txt съдържа списък от само 41 библиотеки. В една наша типична инсталация, инсталираните модули са около 460 520. Поради тази причина и долния списък е от 135 161 библиотеки. Списъка няма претенции да е 100% пълен. При някои допълнителни модули е възможно да има нужда и от допълнителни библиотеки. Създайте файл със съдържанието на долния списък (с име напр. requirements.txt) и инсталирайте с

pip install -r requirements.txt

 Съдържание на файла със зависимости:

acme-tiny==2.0.0
apipkg==1.4
apt-xapian-index==0.45
asterisk==0.0.8
autopep8==1.2.4
Babel==1.3
barcode==0.5.1
BeautifulSoup==3.2.1
beautifulsoup4==4.5.1
bs4==0.0.1
bzr==2.7.0.dev1
BzrTools==2.6.0
cairocffi==0.7.2
CairoSVG==1.0.22
captcha==0.2.1
cffi==1.7.0
chardet==2.0.1
colorama==0.2.5
configobj==4.7.2
coverage==4.2
cryptography==1.5.2
cssutils==1.0.1
cycler==0.10.0
Cython==0.25.1
decorator==3.4.0
defusedxml==0.4.1
docutils==0.12
ecdsa==0.13
enum34==1.1.6
enum34-custom==0.7.2
ethtool==0.7
execnet==1.4.1
feedparser==5.1.3
funcsigs==1.0.2
gdata==2.0.18
GeoIP-Python==1.2.4
geojson==1.3.2
gevent==1.0.2
greenlet==0.4.7
gyp==0.1
html5lib==0.999999999
httplib2==0.8
idna==2.1
ipaddr==2.1.11
ipaddress==1.0.17
IPy==0.83
jcconv==0.2.3
Jinja2==2.7.3
keyring==3.5
Landscape-Client==14.12
launchpadlib==1.10.2
lazr.restfulclient==0.13.3
lazr.uri==1.0.3
linecache2==1.0.0
lxml==3.6.4
Mako==1.0.1
MarkupSafe==0.23
matplotlib==1.5.3
mercurial==3.2.2
mock==1.0.1
models==0.9.3
MySQL-python==1.2.3
ndg-httpsclient==0.4.2
nose==1.3.1
numpy==1.11.2
oauth==1.0.1
OERPLib==0.8.4
ofxparse==0.14
openupgradelib==1.1.2
PAM==0.4.2
pandas==0.19.0
paramiko==1.16.0
passlib==1.6.2
pep8==1.7.0
phonenumbers==7.7.3
Pillow==2.7.0
ply==3.9
psutil==2.2.0
psycogreen==1.0
psycopg2==2.6.2
py==1.4.32
py-Asterisk==0.5.10
pyasn1==0.1.9
pyBarcode==0.7
PyChart==1.39
pycountry==1.20
pycparser==2.14
pycrypto==2.6.1
pycups==1.9.66
pycurl==7.19.3
pydot==1.2.3
Pygments==1.6
pygobject==3.12.0
pygpgme==0.3
pyinotify==0.9.4
PyMySQL==0.7.5
pyOpenSSL==0.13
pyparsing==2.1.10
pyPdf==1.13
pyserial==2.7
pysftp==0.2.8
pytest==3.0.5
pytest-cache==1.0
pytest-cov==2.4.0
pytest-pep8==1.0.6
pytest-timeout==1.2.0
python-apt===0.9.3.5ubuntu2
Python-Chart==1.39
python-dateutil==2.6.0
python-debian==0.1.28
python-distutils-extra==2.38
python-ldap==2.4.10
python-Levenshtein==0.12.0
python-openid==2.2.5
python-slugify==1.2.1
python-stdnum==1.4
pytz==2016.7
pyusb==1.0.0
PyWebDAV==0.9.8
PyYAML==3.11
qrcode==5.3
recaptcha-client==1.0.6
reportlab==3.3.0
requests==2.11.1
roman==2.0.0
SecretStorage==2.0.0
selenium==3.0.1
Shapely==1.3.0
simplejson==3.9.0
six==1.10.0
slug==1.0
slugify==0.0.1
SOAPpy==0.12.22
Sphinx==1.2.3
sphinx-patchqueue==0.5.0
suds==0.4
suds-jurko==0.6
traceback2==1.4.0
Twisted==16.4.1
Twisted-Core==13.2.0
Twisted-Web==13.2.0
unicodecsv==0.14.1
Unidecode==0.4.19
unittest2==1.1.0
urllib3==1.7.1
uTidylib==0.2
utils==0.9.0
validate-email==1.3
vatnumber==1.2
virtualenv==15.0.3
vobject==0.9.3
wadllib==1.3.2
webencodings==0.5
Werkzeug==0.9.6
wstools==0.4.4
wxPython==2.8.12.1
wxPython-common==2.8.12.1
xlrd==1.0.0
XlsxWriter==0.9.4
xlwt==1.1.2
zope.interface==4.3.3

п.п. Редакция и допълнение на списъка от 24.12.2016 г.

]]>
office@odoo.bg (администратор) Odoo 8 Sat, 29 Oct 2016 11:59:25 +0300
Хостинг решения за Odoo https://www.odoo.bg/блог/item/221-хостинг-решения-за-odoo https://www.odoo.bg/блог/item/221-хостинг-решения-за-odoo Хостинг решения за Odoo

До сега не съм писал нещо за хостването на ERP Odoo. Odoo не е лаком за ресурси, стига фирмата да не е със 100 едновременно работещи потребителя. Общия брой не е от значение, може да са 100, 1000, 10000... В общия случай са достатъчни 4 ядра и 4 GB RAM и 1 TB дискове в RAID, но за предпочитане е по-малки SSD за основната система и голям RAID масив за данни. При фирми с 10 едновременно работещи потребителя е напълно достатъчен VPS с 2 ядра и 2 GB RAM. Клиентите ни предпочитат различни решения и имат различни възможности и ние сме длъжни да се съобразим с това. По долу ще ви запозная с някои решения.

Някои от средните и големите фирми предпочитат да хостват на собствени сървъри. Винаги имат изградена локална мрежа и някакви файлови сървъри. При някои от тях инсталациите се правят на някой от съществуващите сървъри, но в повечето случаи сървърите са стари и не са подходящи за нуждите на ERP Odoo. При тази ситуация ние препоръчваме нов сървър с виртуализация и няколко виртуални машини: за Odoo, за PBX, за файлов сървър, за имейл сървър, сървър за базата данни и сървър за ауторизация и автоматично създаване на акоунти на потребителите за всички системи. Понякога има и сървър за документи, но в повечето случаи това е наследена структура и обикновено мигрираме това решение към документната система на Odoo. Това решение, със собствен сървър, е комплексно и много добро за фирмата ползвател, но изисква надеждна и добра интернет свързаност, ако (както е обикновено) е нужно да има постоянен и сигурен достъп до Odoo отвън локалната мрежа и резервно захранване (според дейността на фирмата, UPS и/или дизел генератор). Някои предпочитат външния достъп да е само чрез VPN. Ние не налагаме на клиентите си конкретни решения, а само правим препоръки за надеждност и сигурност на комуникациите им. При големи фирми с много потребители Odoo работи на отделен физически сървър, а базата данни е на друг физически сървър. Обикновено работим със сървъри на Persi.

При някои фирми предпочитанията са за хостване на колокиран сървър, при условията описани по-горе. В този случай препоръчваме колокация в Телепойнт. Осигурява много добра международна свързаност и висока надеждност.

Други предпочитат нает сървър. Предлагаме сървър от Delta, ако държат да е в Бълагария, или от Hetzner, ако не е от значение.

Някои средни и малки фирми предпочитат да започнат на VPS. Тогава предлагаме VPS от Delta за България или други много различни възможности според изискванията за сигурност/качество/цена.

Общото при някои от фирмите хостващи не на собствен сървър е, че при тях има изискване да се хостват на територии, на които разкриването на информация е защитено, например в Холандия.

Ние предлагаме цялостни решения за инфараструктурата при клиента и не се ограничаваме само с внедряването на ERP Odoo. Доверете ни се! Сигурността на вашите данни е от първостепенно значение за нас. Можете да се свържете с нас чрез формата за контакт, като ни изпратите имейл или ни позвъните.

]]>
office@odoo.bg (администратор) Odoo 8 Thu, 13 Oct 2016 22:00:54 +0300
Номер на фактура от доставчик при покупка - задължително поле https://www.odoo.bg/блог/item/219-номер-на-фактура-от-доставчик-при-покупка-задължително-поле https://www.odoo.bg/блог/item/219-номер-на-фактура-от-доставчик-при-покупка-задължително-поле Номер на фактура от доставчик при покупка - задължително поле

В Odoo 8, вероятно и в 9, съществува един  чисто потребителски проблем при получаване на фактура от доставчик при покупка. Проблема е, че полето за номер на фактурата на доставчика не е задължително и често попълването му се забравя от потребителите. Същевременно това поле е важно за да може да присъства в банковите извлечения или да се генерира коректно в дневника за покупки при месечната справка декларация по ДДС. Номерът който се генерира автоматично в системата (напр. EXJ/2016/0241) всъщност е номер на операцията в дневника за покупки на Odoo и разбира се това не е номер на фактурата на доставчика.

 

Проблема се решава с пач на модула account във файла account_invoice.py като промените кода между редове 195 и 197 от:

 

    supplier_invoice_number = fields.Char(string='Supplier Invoice Number',
        help="The reference of this invoice as provided by the supplier.",
        readonly=True, states={'draft': [('readonly', False)]})

на:

    supplier_invoice_number = fields.Char(string='Supplier Invoice Number',
        help="The reference of this invoice as provided by the supplier.",
        required=False, readonly=True, states={'draft': [('readonly', False),('required',True)]})

В нашите инсталации редовете са 212 до 214, понеже в този и други модули има доста пачове, коригиращи счетоводната система на Odoo, за да работи коректно с някои специфични казуси в българското счетоводство. Всички пачове са публикувани в Github на адрес https://github.com/OdooBulgaria/odoo-8-bulgarian-accounting-patches

]]>
office@odoo.bg (администратор) Odoo 8 Tue, 20 Sep 2016 10:28:39 +0300
Инсталиране на някои зависимости при специфични темплейти за фронтрнд, блог и електронна търговия https://www.odoo.bg/блог/item/218-инсталиране-на-някои-зависимости-при-специфични-темплейти-за-фронтрнд,-блог-и-електронна-търговия https://www.odoo.bg/блог/item/218-инсталиране-на-някои-зависимости-при-специфични-темплейти-за-фронтрнд,-блог-и-електронна-търговия

При инсталация на някой темплейти, като например http://www.odooshoppe.com/shop/product/tangy-e-commerce-theme-24 (https://www.odoo.com/apps/themes/8.0/website_ecommerce/), липсата на предварително инсталирани зависимости чупи дизайна (CSS+JS) на целия фронтенд. Проблема се рещава така:

  • sudo apt-get install curl
  • sudo apt-get install -y nodejs
  • sudo npm install -g npm (to update npm)
  • sudo npm install -g less less-plugin-clean-css

Или още по лесно:

sudo apt-get -y install curl npm && curl -sL https://deb.nodesource.com/setup | bash - && apt-get -y install nodejs && npm install -g npm && npm install -g less less-plugin-clean-css

 

]]>
office@odoo.bg (администратор) Odoo 8 Sun, 31 Jul 2016 16:19:05 +0300
Плащане по фактура от клиент частично в процент и пачване на модул sale за коректна работа https://www.odoo.bg/блог/item/217-плащане-по-фактура-от-клиент-частично-в-процент-и-пачване-на-модул-sale-за-коректна-работа https://www.odoo.bg/блог/item/217-плащане-по-фактура-от-клиент-частично-в-процент-и-пачване-на-модул-sale-за-коректна-работа

В продължение на темата Промяна на сметката по подразбиране за авансовo плащание при покупкa или продажбa - Odoo 8, днес ще решим един проблем, който към днешна дата не е решен в официалната версия на Odoo въпреки, че има пач за това от март 2015 г.

Става дума за това, че при плащане по фактура от клиент частично в процент, не се начислява ДДС, а цялото ДДС се начислява при окончателната фактура. Проблема е поставен тук - https://github.com/odoo/odoo/issues/530 и тук - https://github.com/odoo/odoo/issues/4653. Pешен e с пач, който се намира в Github на адрес - https://github.com/odoo/odoo/pull/6067/commits/dd4a330e6e2a04a3d721a31e99063c6710114646

По долу поставям кода на пача на файла addons/sale/wizard/sale_make_invoice_advance.py

@@ -105,9 +105,23 @@ def _prepare_advance_invoice_vals(self, cr, uid, ids, context=None):
 raise osv.except_osv(_('Incorrect Data'),
 _('The value of Advance Amount must be positive.'))
 if wizard.advance_payment_method == 'percentage':
- inv_amount = sale.amount_untaxed * wizard.amount / 100
- if not res.get('name'):
- res['name'] = self._translate_advance(cr, uid, percentage=True, context=dict(context, lang=sale.partner_id.lang)) % (wizard.amount)
+ inv_lines_values = []
+ for sale_line in sale.order_line :
+ name = self._translate_advance(cr, uid, percentage=True, context=dict(context, lang=sale.partner_id.lang)) % (wizard.amount)
+ # create the invoice line
+ inv_line_values = {
+ 'name': name + '\n' + sale_line.name,
+ 'origin': sale.name,
+ 'account_id': res['account_id'],
+ 'price_unit': (sale_line.product_uos_qty * sale_line.price_unit * wizard.amount) / 100,
+ 'quantity': 1.0,
+ 'discount': sale_line.discount,
+ 'uos_id': res.get('uos_id', False),
+ 'product_id': False,
+ 'invoice_line_tax_id': [(6, 0, sale_line.tax_id.ids)],
+ 'account_analytic_id': sale.project_id.id or False,
+ }
+ inv_lines_values.append((0, 0, inv_line_values))
 else:
 inv_amount = wizard.amount
 if not res.get('name'):
@@ -119,33 +133,35 @@ def _prepare_advance_invoice_vals(self, cr, uid, ids, context=None):
 symbol_order = (symbol, inv_amount)
 res['name'] = self._translate_advance(cr, uid, context=dict(context, lang=sale.partner_id.lang)) % symbol_order
 
- # determine taxes
- if res.get('invoice_line_tax_id'):
- res['invoice_line_tax_id'] = [(6, 0, res.get('invoice_line_tax_id'))]
- else:
- res['invoice_line_tax_id'] = False
+ # determine taxes
+ if res.get('invoice_line_tax_id'):
+ res['invoice_line_tax_id'] = [(6, 0, res.get('invoice_line_tax_id'))]
+ else:
+ res['invoice_line_tax_id'] = False
+
+ # create the invoice
+ inv_line_values = {
+ 'name': res.get('name'),
+ 'origin': sale.name,
+ 'account_id': res['account_id'],
+ 'price_unit': inv_amount,
+ 'quantity': wizard.qtty or 1.0,
+ 'discount': False,
+ 'uos_id': res.get('uos_id', False),
+ 'product_id': wizard.product_id.id,
+ 'invoice_line_tax_id': res.get('invoice_line_tax_id'),
+ 'account_analytic_id': sale.project_id.id or False,
+ }
+ inv_lines_values = [(0, 0, inv_line_values)]
 
- # create the invoice
- inv_line_values = {
- 'name': res.get('name'),
- 'origin': sale.name,
- 'account_id': res['account_id'],
- 'price_unit': inv_amount,
- 'quantity': wizard.qtty or 1.0,
- 'discount': False,
- 'uos_id': res.get('uos_id', False),
- 'product_id': wizard.product_id.id,
- 'invoice_line_tax_id': res.get('invoice_line_tax_id'),
- 'account_analytic_id': sale.project_id.id or False,
- }
 inv_values = {
 'name': sale.client_order_ref or sale.name,
 'origin': sale.name,
 'type': 'out_invoice',
 'reference': False,
 'account_id': sale.partner_id.property_account_receivable.id,
 'partner_id': sale.partner_invoice_id.id,
- 'invoice_line': [(0, 0, inv_line_values)],
+ 'invoice_line': inv_lines_values,
 'currency_id': sale.pricelist_id.currency_id.id,
 'comment': '',
 'payment_term': sale.payment_term.id,
 
]]>
office@odoo.bg (администратор) Odoo 8 Sat, 30 Jul 2016 19:46:12 +0300
Изключване на администратора от човешки ресурси (Odoo 8) https://www.odoo.bg/блог/item/216-изключване-на-администратора-от-човешки-ресурси-odoo-8 https://www.odoo.bg/блог/item/216-изключване-на-администратора-от-човешки-ресурси-odoo-8 Изключване на администратора от човешки ресурси (Odoo 8)

В практиката често администратора на ERP Odoo не е служител на фирмата, в която се извършва внедряването, а на фирмата внедрител. Става дума за администратора с ID 1, т.е. този, който е направил първоначалната инсталация и има пълни права. Честа грешка е изтриването на съответния свързан служител в човешки ресурси. Изтриването води след себе си невъзможност за инсталация на модулите hr_timsheet и/или hr_evaluation. Проблема се решава с промяна на съответните xml файлове:

в addons/hr_evaluation/hr_evaluation_data.xml премахнете редове 44,45 и 46 (маркирани в оранжево) или ги коментирайте  с <!-- код -->

<record id="hr_evaluation_plan_phase_sendtoemployee0" model="hr_evaluation.plan.phase">
            <field name="plan_id" ref="hr_evaluation_plan_managersevaluationplan0"/>
            <field name="name">Send to Employee</field>
            <field eval="0" name="send_anonymous_manager"/>
            <field eval="1" name="sequence"/>
            <field name="company_id" ref="base.main_company"/>
            <field name="action">self</field>
            <field eval="0" name="send_anonymous_employee"/>
            <field eval="0" name="send_answer_employee"/>
            <field name="survey_id" ref="appraisal_form"/>
            <field eval="0" name="send_answer_manager"/>
            <field eval="0" name="wait"/>
        </record>

        <record id="hr.employee" model="hr.employee">
            <field name="evaluation_plan_id" ref="hr_evaluation_plan_managersevaluationplan0"/>
        </record>

        <record forcecreate="True" id="ir_cron_scheduler_evaluation" model="ir.cron">
           <field name="name">Run Employee Appraisal</field>
           <field eval="True" name="active" />
           <field name="user_id" ref="base.user_root" />
           <field name="interval_number">1</field>
           <field name="interval_type">days</field>
           <field name="numbercall">-1</field>
           <field eval="'hr.employee'" name="model" />
           <field eval="'run_employee_evaluation'" name="function" />
           <field eval="'(False,)'" name="args" />
        </record>

в addons/hr/hr_data.xml премахнете редове от 16 до 20 (маркирани в оранжево) или ги коментирайте  с <!-- код -->

<p>More HR features are available via extra applications: Recruitment Process (manage job positions and recruitment), Timesheet Validation (record timesheets and attendance),
Leave Management (keep track of employee leaves), Expense Management (manage employee expenses), Employee Appraisals (organize employee surveys, where employees evaluate their subordinates or their manager).</p>]]></field>
        </record>
        <record id="employee" model="hr.employee">
            <field name="name">Administrator</field>
            <field name="user_id" ref="base.user_root"/>
            <field name="image" type="base64" file="hr/static/img/employee-image.png"/>
        </record>
    </data>
</openerp>

в addons/hr_timesheet/hr_timesheet_data.xml премахнете редове от 5 до 17 (маркирани в оранжево) или ги коментирайте  с <!-- код -->

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data noupdate="1">
        <record id="analytic_journal" model="account.analytic.journal">
            <field name="code">TS</field>
            <field name="name">Timesheet Journal</field>
            <field name="type">general</field>
        </record>
        <record id="hr.employee" model="hr.employee">
            <field name="journal_id" ref="analytic_journal"/>
        </record>
        <record id="product.product_product_consultant" model="product.product">
            <field name="sale_ok">True</field>
        </record>
    </data>
</openerp>

и ръчно да създадете дневника Timesheet Jornal (TS).

По подобен начин се прави и за версия 9.

 

]]>
office@odoo.bg (администратор) Odoo 8 Tue, 19 Jul 2016 22:40:46 +0300
Скриване на таб Снабдявания във формата на продукт за определени групи https://www.odoo.bg/блог/item/215-скриване-на-таб-снабдявания-във-формата-на-продукт-за-определенаи-групи https://www.odoo.bg/блог/item/215-скриване-на-таб-снабдявания-във-формата-на-продукт-за-определенаи-групи Скриване на таб Снабдявания във формата на продукт за определени групи

При някои фирми с много регионални офиси е желателно групи потребители да не виждат информация за доставна цена на продукт, както и за доставчика. Тази информация се съдържа в таб Снабдявания във формата на продукт. Скриването става с промяна на xml изгледа на формата за продукт product.template.common.form

Отворете Настройли - > Технически -> Потребителски интерфейс -> Изгледи и филтъра намерете product.template.common.form. Редактирайте реда:

<page string="Procurements" groups="base.group_user">

като замените групата с тази, която искате да вижда таб Снабдявания, напр. със счетоводители. Реда ще изглежда така:

<page string="Procurements" groups="account.group_account_invoice">

По аналогичен начин можете да скриете таб Ценови листи. В изглед product.template.prices.form добавете група към ред:

<page string="Price Lists" name="pricelists" attrs="{'invisible': [('product_variant_count', '&gt;', 1)]}">, който става

<page string="Price Lists" name="pricelists" attrs="{'invisible': [('product_variant_count', '&gt;', 1)]}" groups="account.group_account_invoice">

 Разбира се можете да направите предварително нова група с права и критерии по ваш избор. По подобен начин можете да скривате всяко едно поле  или таб във всяка една форма в Odoo 8.

 

]]>
office@odoo.bg (администратор) Odoo 8 Sat, 09 Jul 2016 10:43:31 +0300
Настройки за мултипроцесорна работа на Odoo 8 https://www.odoo.bg/блог/item/214-настройки-за-мултипроцесорна-работа-на-odoo-8 https://www.odoo.bg/блог/item/214-настройки-за-мултипроцесорна-работа-на-odoo-8 Настройки за мултипроцесорна работа на Odoo 8

Обикновенно ERP Odoo  се инсталира на VPS или на физически сървър. Винаги логическите процесори са повече от един, най често 4, 8, 16. Ако Odoo не е настроен да работи в мултипроцесорен режим, вие не ползвате ефективно сървъра, в часност процесора му. Това е особенно важно в реални ситуации, когато в системата работят паралелно (едновременно) над 5 потребителя. Без значение е общия брой потребители.

По подразбиране мултипроцесорната поддръжка не е включена в стандартния конфигурационен файл (напр. /etc/odoo-server.conf). Съществуват няколко параметъра, които трябва да се зададът и настроят спрямо броя на логическите ядра и наличната RAM. На първо място това е workers. Правилото е workers=(cpu cores X 2)+1 или при 4 ядра се задава workers=9. Друг важен параметър е max_cron_threads. Той има стойност от 1 до 3 според броя на ядрата и наличната RAM. Други два параметъра са limit_soft_memory и limit_memory_hard, като limit_memory_hard е с 30% по-голям от limit_soft_memory. Тези параметри зависят от наличната RAM и при 4 ядра (8 логически), limit_memory_hard = 1572864000, limit_memory_soft = 107374182, workers=9 и max_cron_threads=3, Odoo спокойно се справя с над 20 паралелно работещи потребителя.

По някаква причина, не сме изследвали проблема, ако е включен мултипроцесорния режим и longpolling на порт 8072 и xmlrpc порта не е 8069, в лога непрекъснато се появява грешката Exception: bus.Bus unavailable.

Дискусии и експерименти на тази тема можете да видите на https://github.com/DocCyblade/tkl-odoo/issues/49

В таблицата по-долу можете да видите някои готови стойности при различни комбинации на ядра и RAM:

CPUsPhysicalworkerscronMem PerMax Memlimit_memory_soft
ANY =< 256MB NR NR NR NR NR
1 512MB 0 N/A N/A N/A N/A
1 512MB 1 1 177MB 354MB 185127901
1 1GB 2 1 244MB 732MB 255652815
1 2GB 2 1 506MB 1518MB 530242876
2 1GB 3 1 183MB 732MB 191739611
2 2GB 5 2 217MB 1519MB 227246947
2 4GB 5 2 450MB 3150MB 471974428
4 2GB 5 2 217MB 1519MB 227246947
4 4GB 9 2 286MB 3146MB 300347363
4 8GB 9 3 546MB 6552MB 572662306
4 16GB 9 3 1187MB 14244MB 1244918057
6 12GB 10 4 763MB 10682MB 800304465
6 16GB 13 4 838MB 14246MB 878765687
6 32GB 13 4 1676MB 28492MB 81757531374
8 32GB 17 5 1295MB 28490MB 1358092426
8 64GB 17 5 2590MB 56980MB 2716184851

Calculations on how we got the above chart

M = Total memory in bytes (1048576 = 1MB)
W = Workers (workers )
CW = Cron workers (max_cron_threads)
TW = W + CW

For ram 512 to 999MB
((TW * 0.45 ) + TW) / M = limit_soft_memory

1GB - 1.99GB
(TW * 0.40 ) + (TW - 1) / M = limit_soft_memory

2GB - 3.99GB
(TW * 0.35 ) + (TW - 1) / M = limit_soft_memory

4GB - 7.99GB
(TW * 0.30 ) + (TW - 2) / M = limit_soft_memory

8GB + 11.99GB
(TW * 0.25 ) + (TW - 3) / M = limit_soft_memory

12GB +
(TW * 0.15 ) + (TW - 3) / M = limit_soft_memory

 

Типично натоварване на реална инсталация при един потребител и синхронизация на преводи:

odoo workers 9 cron 3

]]>
office@odoo.bg (администратор) Odoo 8 Sat, 25 Jun 2016 13:34:09 +0300