Merge branch 'master' of ssh://gitlab.datenpol.at:122/odoo/dp-template

develop
Andreas Brückl 2016-11-18 10:12:30 +01:00
commit c27a8723ab
16 changed files with 474 additions and 445 deletions

View File

@ -1,8 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
############################################################################## ##############################################################################
# #
# OpenERP, Open Source Management Solution # datenpol gmbh
# Copyright (C) 20014-2016 Camadeus GmbH (<http://www.camadeus.at>). # Copyright (C) 2013-TODAY datenpol gmbh (<http://www.datenpol.at/>)
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as # it under the terms of the GNU Affero General Public License as
@ -22,4 +22,3 @@
import models import models
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -2,7 +2,7 @@
############################################################################## ##############################################################################
# #
# datenpol gmbh # datenpol gmbh
# Copyright (C) 2013-TODAY datenpol gmbh(<http://www.datenpol.at>) # Copyright (C) 2013-TODAY datenpol gmbh (<http://www.datenpol.at/>)
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as # it under the terms of the GNU Affero General Public License as
@ -26,11 +26,13 @@
'version': '1.0', 'version': '1.0',
'description': """Individuelle Anpassungen""", 'description': """Individuelle Anpassungen""",
'author': 'datenpol gmbh', 'author': 'datenpol gmbh',
'website': 'http://www.datenpol.at', 'website': 'http://www.datenpol.at/',
'depends': ['base'], 'depends': [
'base',
],
'data': [ 'data': [
'data/dp_custom_data.xml', 'data/dp_custom_data.xml',
'views/dp_custom_view.xml', 'views/dp_custom_views.xml',
'security/ir.model.access.csv', 'security/ir.model.access.csv',
], ],
'installable': True, 'installable': True,

View File

@ -1,8 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp> <openerp>
<data noupdate="0"> <data noupdate="0">
<!-- UNITS --> <!-- UNITS -->
<!-- Einheit in Stück umbenennen --> <!-- Einheit in Stück umbenennen -->
@ -120,8 +118,5 @@
'width': fields.float('Width', help='The width of the package'), 'width': fields.float('Width', help='The width of the package'),
'length': fields.float('Length', help='The length of the package'), 'length': fields.float('Length', help='The length of the package'),
'weight': fields.float('Empty Package Weight'), --> 'weight': fields.float('Empty Package Weight'), -->
</data>
</data>
</openerp> </openerp>

View File

@ -2,7 +2,7 @@
############################################################################## ##############################################################################
# #
# datenpol gmbh # datenpol gmbh
# Copyright (C) 2013-TODAY datenpol gmbh(<http://www.datenpol.at>) # Copyright (C) 2013-TODAY datenpol gmbh (<http://www.datenpol.at/>)
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as # it under the terms of the GNU Affero General Public License as
@ -24,7 +24,6 @@ from openerp import api
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp import SUPERUSER_ID from openerp import SUPERUSER_ID
from openerp import tools from openerp import tools
from lxml import etree
DISABLED_MENUS = [ DISABLED_MENUS = [
] ]
@ -38,16 +37,16 @@ class ir_ui_menu(models.Model):
menu_ids = [] menu_ids = []
for menu in DISABLED_MENUS: for menu in DISABLED_MENUS:
module,xml_id = menu.split('.') module, xml_id = menu.split('.')
menu = data_obj.get_object(cr, uid, module, xml_id) menu = data_obj.get_object(cr, uid, module, xml_id)
if menu: if menu:
menu_ids.append(menu.id) menu_ids.append(menu.id)
return menu_ids return menu_ids
def _filter_visible_menus(self, cr, uid, ids, context=None): def _filter_visible_menus(self, cr, uid, ids, context=None):
if uid != 1: if uid != 1:
disabled_ids = self.get_disabled_menu_ids(cr, uid) disabled_ids = self.get_disabled_menu_ids(cr, uid)
ids = [id for id in ids if id not in disabled_ids] ids = [id for id in ids if id not in disabled_ids]
ids = super(ir_ui_menu, self)._filter_visible_menus(cr, uid, ids, context) ids = super(ir_ui_menu, self)._filter_visible_menus(cr, uid, ids, context)

View File

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp> <openerp>
<data> <data>
</data>
</data>
</openerp> </openerp>

View File

@ -1,14 +1,16 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
{ {
'name': 'datepol Report Anpassungen', 'name': 'datepol Report-Anpassungen',
'category': 'Custom', 'category': 'Custom',
'version': '1.0', 'version': '1.0',
'summary': """Individuelle Report Anpassungen""", 'summary': """Individuelle Report Anpassungen""",
'description': """Individuelle Report Anpassungen""", 'description': """Individuelle Report Anpassungen""",
'author': 'datenpol gmbh', 'author': 'datenpol gmbh',
'website': 'http://www.datenpol.at', 'website': 'http://www.datenpol.at/',
'depends': ['base'], 'depends': [
'base',
],
'data': [ 'data': [
# 'security/ir.model.access.csv', # 'security/ir.model.access.csv',
'views/layouts.xml', 'views/layouts.xml',

View File

@ -1,5 +1,5 @@
<openerp> <openerp>
<data> <data>
<!-- Delivery Body --> <!-- Delivery Body -->
<template id="report_delivery_document" inherit_id="delivery.report_delivery_document2"> <template id="report_delivery_document" inherit_id="delivery.report_delivery_document2">
<h2 position="replace"> <h2 position="replace">
@ -49,6 +49,7 @@
</xpath> </xpath>
<xpath expr="//table[@t-if='o.pack_operation_ids']/tbody/tr/td[2]" position="replace"/> <xpath expr="//table[@t-if='o.pack_operation_ids']/tbody/tr/td[2]" position="replace"/>
</template> </template>
<!-- Render Report with Header --> <!-- Render Report with Header -->
<template id="stock.report_deliveryslip"> <template id="stock.report_deliveryslip">
<t t-set="header" t-value="1"/> <t t-set="header" t-value="1"/>
@ -56,6 +57,7 @@
<t t-call="dp_report.report_delivery_document" t-lang="o.partner_id.lang"/> <t t-call="dp_report.report_delivery_document" t-lang="o.partner_id.lang"/>
</t> </t>
</template> </template>
<!-- Render Report without Header --> <!-- Render Report without Header -->
<template id="report_deliveryslip_blank"> <template id="report_deliveryslip_blank">
<t t-set="header" t-value="0"/> <t t-set="header" t-value="0"/>
@ -63,6 +65,7 @@
<t t-call="dp_report.report_delivery_document" t-lang="o.partner_id.lang"/> <t t-call="dp_report.report_delivery_document" t-lang="o.partner_id.lang"/>
</t> </t>
</template> </template>
<!-- Create new Report --> <!-- Create new Report -->
<report id="dp_report_deliveryslip_blank" <report id="dp_report_deliveryslip_blank"
string="Lieferschein Ohne Logo" string="Lieferschein Ohne Logo"
@ -70,6 +73,5 @@
report_type="qweb-pdf" report_type="qweb-pdf"
name="dp_report.report_deliveryslip_blank" name="dp_report.report_deliveryslip_blank"
file="dp_report.report_deliveryslip_blank"/> file="dp_report.report_deliveryslip_blank"/>
</data>
</data>
</openerp> </openerp>

View File

@ -1,5 +1,5 @@
<openerp> <openerp>
<data> <data>
<!-- Invoice Body --> <!-- Invoice Body -->
<template id="report_invoice_document" inherit_id="account.report_invoice_document"> <template id="report_invoice_document" inherit_id="account.report_invoice_document">
<th t-if="display_discount" position="replace"> <th t-if="display_discount" position="replace">
@ -33,26 +33,27 @@
</p> </p>
</p> </p>
</template> </template>
<!-- Render Report with Header --> <!-- Render Report with Header -->
<template id="account.report_invoice"> <template id="account.report_invoice">
<t t-call="report.html_container"> <t t-call="report.html_container">
<t t-set="header" t-value="1"/> <t t-set="header" t-value="1"/>
<t t-foreach="docs" t-as="o"> <t t-foreach="docs" t-as="o">
<t t-call="dp_report.report_invoice_document" t-lang="o.partner_id.lang"> <t t-call="dp_report.report_invoice_document" t-lang="o.partner_id.lang"/>
</t>
</t> </t>
</t> </t>
</template> </template>
<!-- Render Report without Header --> <!-- Render Report without Header -->
<template id="report_invoice_blank"> <template id="report_invoice_blank">
<t t-call="report.html_container"> <t t-call="report.html_container">
<t t-set="header" t-value="0"/> <t t-set="header" t-value="0"/>
<t t-foreach="docs" t-as="o"> <t t-foreach="docs" t-as="o">
<t t-call="dp_report.report_invoice_document" t-lang="o.partner_id.lang"> <t t-call="dp_report.report_invoice_document" t-lang="o.partner_id.lang"/>
</t>
</t> </t>
</t> </t>
</template> </template>
<!-- Create new Report --> <!-- Create new Report -->
<report id="dp_report_invoice_blank" <report id="dp_report_invoice_blank"
string="Rechnung Ohne Logo" string="Rechnung Ohne Logo"
@ -60,6 +61,5 @@
report_type="qweb-pdf" report_type="qweb-pdf"
name="dp_report.report_invoice_blank" name="dp_report.report_invoice_blank"
file="dp_report.report_invoice_blank"/> file="dp_report.report_invoice_blank"/>
</data>
</data>
</openerp> </openerp>

View File

@ -1,24 +1,24 @@
<openerp> <openerp>
<data> <data>
<template id="report.external_layout"> <template id="report.external_layout">
<!-- Multicompany --> <!-- Multicompany -->
<t t-if="not o and doc"> <t t-if="not o and doc">
<t t-set="o" t-value="doc"/> <t t-set="o" t-value="doc"/>
</t> </t>
<t t-if="o and 'company_id' in o"> <t t-if="o and 'company_id' in o">
<t t-set="company" t-value="o.company_id"></t> <t t-set="company" t-value="o.company_id"/>
</t> </t>
<t t-if="not o or not 'company_id' in o"> <t t-if="not o or not 'company_id' in o">
<t t-set="company" t-value="res_company"></t> <t t-set="company" t-value="res_company"/>
</t> </t>
<t t-if="header == 1"> <t t-if="header == 1">
<t t-call="dp_report.external_layout_header" /> <t t-call="dp_report.external_layout_header"/>
</t> </t>
<t t-if="header == 0"> <t t-if="header == 0">
<t t-call="dp_report.external_layout_header_blank" /> <t t-call="dp_report.external_layout_header_blank"/>
</t> </t>
<t t-raw="0" /> <t t-raw="0"/>
<t t-call="report.external_layout_footer" /> <t t-call="report.external_layout_footer"/>
<t t-esc="header"/> <t t-esc="header"/>
</template> </template>
@ -54,5 +54,5 @@
</div> </div>
</div> </div>
</template> </template>
</data> </data>
</openerp> </openerp>

View File

@ -1,5 +1,5 @@
<openerp> <openerp>
<data> <data>
<!-- Sale Order Body --> <!-- Sale Order Body -->
<template id="report_saleorder_document" inherit_id="sale.report_saleorder_document"> <template id="report_saleorder_document" inherit_id="sale.report_saleorder_document">
<th t-if="display_discount" position="replace"> <th t-if="display_discount" position="replace">
@ -53,26 +53,27 @@
</div> </div>
</div> </div>
</template> </template>
<!-- Render Report with Header --> <!-- Render Report with Header -->
<template id="sale.report_saleorder"> <template id="sale.report_saleorder">
<t t-call="report.html_container"> <t t-call="report.html_container">
<t t-set="header" t-value="1"/> <t t-set="header" t-value="1"/>
<t t-foreach="docs" t-as="doc"> <t t-foreach="docs" t-as="doc">
<t t-call="dp_report.report_saleorder_document" t-lang="doc.partner_id.lang"> <t t-call="dp_report.report_saleorder_document" t-lang="doc.partner_id.lang"/>
</t>
</t> </t>
</t> </t>
</template> </template>
<!-- Render Report without Header --> <!-- Render Report without Header -->
<template id="report_saleorder_blank"> <template id="report_saleorder_blank">
<t t-call="report.html_container"> <t t-call="report.html_container">
<t t-set="header" t-value="0"/> <t t-set="header" t-value="0"/>
<t t-foreach="docs" t-as="doc"> <t t-foreach="docs" t-as="doc">
<t t-call="dp_report.report_saleorder_document" t-lang="doc.partner_id.lang"> <t t-call="dp_report.report_saleorder_document" t-lang="doc.partner_id.lang"/>
</t>
</t> </t>
</t> </t>
</template> </template>
<!-- Create new Report --> <!-- Create new Report -->
<report id="dp_report_saleorder_blank" <report id="dp_report_saleorder_blank"
string="Angebot / Bestellung Ohne Logo" string="Angebot / Bestellung Ohne Logo"
@ -80,6 +81,5 @@
report_type="qweb-pdf" report_type="qweb-pdf"
name="dp_report.report_saleorder_blank" name="dp_report.report_saleorder_blank"
file="dp_report.report_saleorder_blank"/> file="dp_report.report_saleorder_blank"/>
</data>
</data>
</openerp> </openerp>

View File

@ -82,7 +82,6 @@ def main():
'login', 'login',
'install_module_sale', 'install_module_sale',
#'setup_accounting', #'setup_accounting',
#'setup_accounting2',
'set_admin_rights', 'set_admin_rights',
] ]
@ -127,6 +126,8 @@ def main():
#'update_special_values', #'update_special_values',
'set_sys_params', 'set_sys_params',
#'setup_reports', #'setup_reports',
'consume_tours',
'disable_planners',
] ]
if cmd == 'setup': if cmd == 'setup':

View File

@ -25,7 +25,6 @@ class Config():
'website': 'http://www.datenpol.at/', 'website': 'http://www.datenpol.at/',
'company_registry': '359270p', 'company_registry': '359270p',
'country_id': 'at', # 'de' für Deutschland 'country_id': 'at', # 'de' für Deutschland
'logo': False,
'vat': 'ATU 66309611', 'vat': 'ATU 66309611',
'rml_header1': False, 'rml_header1': False,
'vat_check_vies': True, 'vat_check_vies': True,
@ -84,13 +83,13 @@ class Config():
# Einstellungen Verkauf # Einstellungen Verkauf
self.sale_config = { self.sale_config = {
'group_sale_delivery_address': True, # Verschiedene Adressen für Rechnung und Lieferung 'group_sale_delivery_address': 0, # Verschiedene Adressen für Rechnung und Lieferung
'group_sale_pricelist': True, # Preislisten verwenden 'sale_pricelist_setting': 'fixed', # Verkaufspreis: [fixed], [percentage], [formula]
'group_discount_per_so_line': True, # Rabatte verwenden 'group_discount_per_so_line': 0, # Rabatt auf Verkaufszeilen
'group_uom': True, # Verwende Mengeneinheiten 'group_uom': 0, # Verwende Mengeneinheiten
'group_invoice_deli_orders': True, # Erstelle Rechnungen durch Auslieferungen 'default_invoice_policy': 'order' # Standardabrechnung: [order], [delivery]
} }
self.order_policy = 'picking' # Erzeuge Rechnung: [manual], [picking],[prepaid] self.order_policy = 'picking' # Erzeuge Rechnung: [manual], [picking], [prepaid]
# Einstellungen Einkauf # Einstellungen Einkauf
self.purchase_config = { self.purchase_config = {
@ -101,26 +100,27 @@ class Config():
'group_costing_method': True, # Benutzen Sie 'Einkaufs-' oder 'Durchschnittspreis' zur Bestandsbewertung 'group_costing_method': True, # Benutzen Sie 'Einkaufs-' oder 'Durchschnittspreis' zur Bestandsbewertung
} }
# Einstellungen Finanzen
self.finance_config = { self.finance_config = {
#'group_multi_currency':True 'group_multi_currency': False, # Multiwährungsfunktion aktivieren
'default_sale_tax_id': 'XML:l10n_at.1_tax_at_mwst_10', # Standardsteuer Verkauf
} }
# Einstellungen Personal
#Einstellungen Personal
self.hr_config = { self.hr_config = {
'module_hr_expense': True, # Spesen der Mitarbeiter verwalten 'module_hr_expense': True, # Spesen der Mitarbeiter verwalten
'module_hr_timesheet': False, # Verwalten Sie Ihre Studenzettel 'module_hr_timesheet': False, # Verwalten Sie Ihre Studenzettel
'group_hr_attendance': True, # Zuweisung der Berechtigung zur Arbeitszeiteingabe für alle Benutzer 'group_hr_attendance': True, # Zuweisung der Berechtigung zur Arbeitszeiteingabe für alle Benutzer
} }
#Einstellungen Lager # Einstellungen Lager
self.stock_config = { self.stock_config = {
'group_stock_multiple_locations': True, # Verwalten Sie mehrere Lager und Lagerorte 'warehouse_and_location_usage_level': 0, # Warehouses and Locations usage level
'group_stock_tracking_lot': False, # Benutze Verpackungen: Paletten, Boxen, ... 'group_stock_tracking_lot': 0, # Verpackungsgrößen bei der Verpackung: Paletten, Kisten, Behälter...
'group_stock_production_lot': True, # Verfolgen Sie Los- und Seriennummern. 'group_stock_production_lot': 0, # Verfolgen Sie Los- und Seriennummern
'group_stock_packaging': False, # Ermöglicht die Auswahl einer Verpackung 'group_stock_packaging': 0, # Manage available packaging options per products
'group_stock_adv_location': True, # Verwalten Sie erweiterte Routen im Lager 'group_stock_adv_location': 0, # Advanced routing of products using rules
'group_product_variant': 0, # Produkte können mehrere Attribute haben, die Varianten definieren
} }
# Einstellungen Fertigung # Einstellungen Fertigung
@ -253,4 +253,5 @@ class Config():
self.system_parameters = { self.system_parameters = {
'ir_attachment.location': 'db', # [db] oder [file] 'ir_attachment.location': 'db', # [db] oder [file]
'database.expiration_date': '2038-01-19',
} }

View File

@ -95,6 +95,26 @@ class DatenpolFunctions():
fi.close() fi.close()
return content return content
def resolve_xml_id(self, value):
# In case the value starts with 'XML:' then take the remaining string
# as an XML-Id, resolve it and return that. Otherwise return value
# unchanged.
if type(value) != str or value[:4] != 'XML:':
return value
xml_id = value[4:]
res_id = self._execute('ir.model.data', 'xmlid_to_res_id', xml_id)
if not res_id:
raise Exception('XML-Id "%s" nicht vorhanden!' % xml_id)
return res_id
def resolve_xml_ids(self, data):
# Resolve all XML-Ids in the dict data
# Note: This happens in-place, the original dict is returned
for k, v in data.iteritems():
data[k] = self.resolve_xml_id(v)
return data
def set_company(self): def set_company(self):
"""Setze Unternehmensdaten (Allgemein, RML, Logo)""" """Setze Unternehmensdaten (Allgemein, RML, Logo)"""
@ -344,15 +364,6 @@ class DatenpolFunctions():
return self._execute('res.users', 'write', [user_id], vals) return self._execute('res.users', 'write', [user_id], vals)
def setup_accounting(self): def setup_accounting(self):
"""Konfiguration Buchhaltung"""
vals = self._execute('account.installer', 'default_get', [])
vals['charts'] = self.config.chart_of_accounts
wizard_id = self._execute('account.installer', 'create', vals)
self._execute('account.installer', 'action_next', [wizard_id])
return True
def setup_accounting2(self):
"""Konfiguration Kontenplan""" """Konfiguration Kontenplan"""
c = self.config c = self.config
@ -397,7 +408,7 @@ class DatenpolFunctions():
return True return True
def uninstall_chat(self): def uninstall_chat(self):
"""Chat-Modul deinstallieren """ """Chat-Modul deinstallieren"""
modules = ['im_chat', 'im_odoo_support', 'bus'] modules = ['im_chat', 'im_odoo_support', 'bus']
modules_to_install = self._execute('ir.module.module', 'search', [('name', 'in', modules)]) modules_to_install = self._execute('ir.module.module', 'search', [('name', 'in', modules)])
@ -690,14 +701,7 @@ class DatenpolFunctions():
"""Defaultwerte für Dokumente setzen""" """Defaultwerte für Dokumente setzen"""
for model, field, value in self.config.default_values: for model, field, value in self.config.default_values:
# Falls XML ID (prefix "XML:") dann die DB ID holen value = self.resolve_xml_id(value)
if value[0:4] == 'XML:':
xml_id = value[4:]
dummy, dummy2, res_id = self._execute('ir.model.data', 'xmlid_lookup', xml_id)
if not res_id:
raise Exception('Defaultwerte anlegen: XML ID %s nicht vorhanden!' % (xml_id))
value = res_id
vals = { vals = {
'name': field, 'name': field,
'model': model, 'model': model,
@ -800,7 +804,7 @@ class DatenpolFunctions():
if hasattr(self.config, 'finance_config'): if hasattr(self.config, 'finance_config'):
vals = self._execute('account.config.settings', 'default_get', []) vals = self._execute('account.config.settings', 'default_get', [])
vals.update(self.config.finance_config) vals.update(self.resolve_xml_ids(self.config.finance_config))
wizard_id = self._execute('account.config.settings', 'create', vals) wizard_id = self._execute('account.config.settings', 'create', vals)
return self._execute('account.config.settings', 'execute', [wizard_id]) return self._execute('account.config.settings', 'execute', [wizard_id])
return True return True
@ -909,6 +913,34 @@ class DatenpolFunctions():
# except: # except:
# print "Fehler Anlage ExtID " + 'cust_account_mapp_' + acc # print "Fehler Anlage ExtID " + 'cust_account_mapp_' + acc
return True
def consume_tours(self):
"""Odoo-Touren auf konsumiert setzen"""
tours = [
'crm_tour',
'mail_tour',
'sale_tour',
'rte',
'rte_inline',
]
for uid in self._execute('res.users', 'search', []):
for t in tours:
vals = {
'name': t,
'user_id': uid,
}
self._execute('web_tour.tour', 'create', vals)
return True return True
def disable_planners(self):
"""Implementierungsplaner deaktivieren"""
# The dashboard widget itself remains. It can be removed in the
# module web_settings_dashboard in dashboard.xml and dashboard.js.
planner_ids = self._execute('web.planner', 'search', [])
return self._execute('web.planner', 'write', planner_ids, {'active': False})