Created dir structure, imported files from cam-int and whole cam-ext
|  | @ -0,0 +1,4 @@ | |||
| *.pyc | ||||
| .project | ||||
| .pydevproject | ||||
| .settings | ||||
|  | @ -0,0 +1,14 @@ | |||
| [options] | ||||
| 
 | ||||
| xmlrpc_port = 8080 | ||||
| ; This is the password that allows database operations: | ||||
| ; admin_passwd = admin | ||||
| db_host = False | ||||
| db_port = 5436 | ||||
| db_user = False | ||||
| db_password = False | ||||
| 
 | ||||
| addons_path = odoo/addons,ext/addons | ||||
| timezone = Europe/Brussels | ||||
| 
 | ||||
| dbfilter_test = ['.*',] | ||||
|  | @ -0,0 +1,5 @@ | |||
| /var/log/odoo/*.log { | ||||
|     copytruncate | ||||
|     missingok | ||||
|     notifempty | ||||
| } | ||||
|  | @ -0,0 +1,66 @@ | |||
| server { | ||||
|     listen      80 default_server; | ||||
|     server_name "xxxxx"; | ||||
| 
 | ||||
|     # Strict Transport Security | ||||
|     # add_header Strict-Transport-Security max-age=2592000; | ||||
|     rewrite     ^   https://$server_name$request_uri? permanent; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| upstream odoo-server { | ||||
|     server 127.0.0.1:8069 fail_timeout=3000s; | ||||
| } | ||||
| 
 | ||||
| server { | ||||
|     listen 443 ssl default_server; | ||||
|     server_name   _; | ||||
| 
 | ||||
| 
 | ||||
|     # Specifies the maximum accepted body size of a client request, | ||||
|     # as indicated by the request header Content-Length. | ||||
|     client_max_body_size 200m; | ||||
| 
 | ||||
|     # log files | ||||
|     access_log    /var/log/nginx/odoo-access.log; | ||||
|     error_log    /var/log/nginx/odoo-error.log; | ||||
| 
 | ||||
|     # increase proxy buffer to handle some OpenERP web requests | ||||
|     proxy_buffers 16 64k; | ||||
|     proxy_buffer_size 128k; | ||||
| 
 | ||||
|     # SSL config | ||||
|     ssl_certificate     /etc/nginx/ssl/server.crt; | ||||
|     ssl_certificate_key /etc/nginx/ssl/server.key; | ||||
|     ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2; | ||||
|     ssl_ciphers         HIGH:!aNULL:!MD5; | ||||
| 
 | ||||
|     location / { | ||||
|         proxy_pass    http://odoo-server; | ||||
|         # force timeouts if the backend dies | ||||
|         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; | ||||
|         proxy_read_timeout 300s; | ||||
|          | ||||
|         # set headers | ||||
|         proxy_set_header Host $host; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; | ||||
| 
 | ||||
|         # Let the OpenERP web service know that we're using HTTPS, otherwise | ||||
|         # it will generate URL using http:// and not https:// | ||||
|         # proxy_set_header X-Forwarded-Proto https; | ||||
| 
 | ||||
|         # by default, do not forward anything | ||||
|         proxy_redirect off; | ||||
|     } | ||||
| 
 | ||||
|     # cache some static data in memory for 60mins. | ||||
|     # under heavy load this should relieve stress on the OpenERP web interface a bit. | ||||
|     location ~* /web/static/ { | ||||
|         proxy_cache_valid 200 60m; | ||||
|         proxy_buffering    on; | ||||
|         expires 864000; | ||||
|         proxy_pass http://odoo-server; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,50 @@ | |||
| upstream odoo-server { | ||||
|     server 127.0.0.1:8069 fail_timeout=3000s; | ||||
| } | ||||
| 
 | ||||
| server { | ||||
|     listen 80 default_server; | ||||
|     server_name   _; | ||||
| 
 | ||||
| 
 | ||||
|     # Specifies the maximum accepted body size of a client request, | ||||
|     # as indicated by the request header Content-Length. | ||||
|     client_max_body_size 200m; | ||||
| 
 | ||||
|     # log files | ||||
|     access_log    /var/log/nginx/odoo-access.log; | ||||
|     error_log    /var/log/nginx/odoo-error.log; | ||||
| 
 | ||||
|     # increase proxy buffer to handle some OpenERP web requests | ||||
|     proxy_buffers 16 64k; | ||||
|     proxy_buffer_size 128k; | ||||
| 
 | ||||
|     location / { | ||||
|         proxy_pass    http://odoo-server; | ||||
|         # force timeouts if the backend dies | ||||
|         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; | ||||
|         proxy_read_timeout 300s; | ||||
|          | ||||
|         # set headers | ||||
|         proxy_set_header Host $host; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; | ||||
| 
 | ||||
|         # Let the OpenERP web service know that we're using HTTPS, otherwise | ||||
|         # it will generate URL using http:// and not https:// | ||||
|         # proxy_set_header X-Forwarded-Proto https; | ||||
| 
 | ||||
|         # by default, do not forward anything | ||||
|         proxy_redirect off; | ||||
|     } | ||||
| 
 | ||||
|     # cache some static data in memory for 60mins. | ||||
|     # under heavy load this should relieve stress on the OpenERP web interface a bit. | ||||
|     location ~* /web/static/ { | ||||
|         proxy_cache_valid 200 60m; | ||||
|         proxy_buffering    on; | ||||
|         expires 864000; | ||||
|         proxy_pass http://odoo-server; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,35 @@ | |||
| [options] | ||||
| addons_path = /opt/odoo/odoo/addons,/opt/odoo/ext/addons | ||||
| admin_passwd = c76EVdqj | ||||
| 
 | ||||
| db_host = False | ||||
| db_name = False | ||||
| db_password = False | ||||
| db_port = False | ||||
| db_user = odoo | ||||
| 
 | ||||
| debug_mode = False | ||||
| list_db = True | ||||
| log_level = error | ||||
| logfile = /var/log/odoo/odoo-server.log | ||||
| 
 | ||||
| max_cron_threads = 1 | ||||
| workers = 1 | ||||
| 
 | ||||
| xmlrpc_interface = 127.0.0.1 | ||||
| xmlrpc_port = 8069 | ||||
| 
 | ||||
| timezone = Europe/Brussels | ||||
| 
 | ||||
| # 5 min | ||||
| #limit_time_cpu  = 300 | ||||
| # 10 min | ||||
| #limit_time_real = 600 | ||||
| 
 | ||||
| # input DMI: | ||||
| limit_time_cpu  = 3000 | ||||
| limit_time_real = 6000 | ||||
| 
 | ||||
| # if DB > 150MB, otherwise "AccessDenied" error occurs | ||||
| # 10 GB | ||||
| limit_memory_hard = 10000000000 | ||||
|  | @ -0,0 +1,85 @@ | |||
| #!/bin/sh | ||||
| 
 | ||||
| ### BEGIN INIT INFO | ||||
| # Provides:             odoo-server | ||||
| # Required-Start:       $remote_fs $syslog | ||||
| # Required-Stop:        $remote_fs $syslog | ||||
| # Should-Start:         $network | ||||
| # Should-Stop:          $network | ||||
| # Default-Start:        2 3 4 5 | ||||
| # Default-Stop:         0 1 6 | ||||
| # Short-Description:    Enterprise Resource Management software | ||||
| # Description:          Open ERP is a complete ERP and CRM software. | ||||
| ### END INIT INFO | ||||
| 
 | ||||
| PATH=/bin:/sbin:/usr/bin:/usr/local/bin | ||||
| DAEMON=/opt/odoo/odoo/openerp-server | ||||
| NAME=odoo-server | ||||
| DESC=odoo-server | ||||
| 
 | ||||
| #FILTER="^%d$" | ||||
| # Specify the user name (Default: openerp). | ||||
| USER=odoo | ||||
| 
 | ||||
| # Specify an alternate config file (Default: /etc/openerp-server.conf). | ||||
| CONFIGFILE="/opt/odoo/ext/config/odoo-server.conf" | ||||
| 
 | ||||
| # pidfile | ||||
| PIDFILE=/var/run/$NAME.pid | ||||
| 
 | ||||
| # Additional options that are passed to the Daemon. | ||||
| DAEMON_OPTS="-c $CONFIGFILE" | ||||
| 
 | ||||
| [ -x $DAEMON ] || exit 0 | ||||
| [ -f $CONFIGFILE ] || exit 0 | ||||
| 
 | ||||
| checkpid() { | ||||
|     [ -f $PIDFILE ] || return 1 | ||||
|     pid=`cat $PIDFILE` | ||||
|     [ -d /proc/$pid ] && return 0 | ||||
|     return 1 | ||||
| } | ||||
| 
 | ||||
| case "${1}" in | ||||
|         start) | ||||
|                 echo -n "Starting ${DESC}: " | ||||
| 
 | ||||
|                 start-stop-daemon --start --quiet --pidfile ${PIDFILE} \ | ||||
|                         --chuid ${USER} --background --make-pidfile \ | ||||
|                         --exec ${DAEMON} -- ${DAEMON_OPTS} | ||||
| 
 | ||||
|                 echo "${NAME}." | ||||
|                 ;; | ||||
| 
 | ||||
|         stop) | ||||
|                 echo -n "Stopping ${DESC}: " | ||||
| 
 | ||||
|                 start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \ | ||||
|                         --oknodo | ||||
| 
 | ||||
|                 echo "${NAME}." | ||||
|                 ;; | ||||
| 
 | ||||
|         restart|force-reload) | ||||
|                 echo -n "Restarting ${DESC}: " | ||||
| 
 | ||||
|                 start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \ | ||||
|                         --oknodo | ||||
| 
 | ||||
|                 sleep 1 | ||||
| 
 | ||||
|                 start-stop-daemon --start --quiet --pidfile ${PIDFILE} \ | ||||
|                         --chuid ${USER} --background --make-pidfile \ | ||||
|                         --exec ${DAEMON} -- ${DAEMON_OPTS} | ||||
| 
 | ||||
|                 echo "${NAME}." | ||||
|                 ;; | ||||
| 
 | ||||
|         *) | ||||
|                 N=/etc/init.d/${NAME} | ||||
|                 echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2 | ||||
|                 exit 1 | ||||
|                 ;; | ||||
| esac | ||||
| 
 | ||||
| exit 0 | ||||
|  | @ -0,0 +1,25 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution | ||||
| #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU Affero General Public License as | ||||
| #    published by the Free Software Foundation, either version 3 of the | ||||
| #    License, or (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU Affero General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU Affero General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| import cam_custom | ||||
| 
 | ||||
| # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | ||||
| 
 | ||||
|  | @ -0,0 +1,40 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution | ||||
| #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU Affero General Public License as | ||||
| #    published by the Free Software Foundation, either version 3 of the | ||||
| #    License, or (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU Affero General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU Affero General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| 
 | ||||
| { | ||||
|     'name': 'Camadeus Anpassungen', | ||||
|     'category': 'Custom',  | ||||
|     'version': '1.0', | ||||
|     'description': """Individuelle Anpassungen""", | ||||
|     'author': 'camadeus GmbH', | ||||
|     'website': 'http://www.camadeus.at', | ||||
|     'depends': ['crm','sale','mail','account'], | ||||
|     'data': [          | ||||
|         'cam_custom_view.xml', | ||||
|         'cam_custom_data.xml', | ||||
|         'views/custom_theme.xml', | ||||
|     ],   | ||||
|     'installable': True, | ||||
|     'auto_install': False, | ||||
| } | ||||
| 
 | ||||
| # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | ||||
|  | @ -0,0 +1,81 @@ | |||
| # -*- encoding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution     | ||||
| #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved | ||||
| #    $Id$ | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU General Public License as published by | ||||
| #    the Free Software Foundation, either version 3 of the License, or | ||||
| #    (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| from openerp.osv import fields, osv | ||||
| from openerp import api | ||||
| from openerp.tools.translate import _ | ||||
| from openerp import SUPERUSER_ID | ||||
| from openerp import tools | ||||
| from lxml import etree | ||||
| 
 | ||||
| class res_partner(osv.osv): | ||||
|     _inherit = 'res.partner' | ||||
|       | ||||
|     @api.model | ||||
|     def fields_view_get_address(self, arch): | ||||
|         """ verhindert das Überschreiben von address_format """ | ||||
|         return arch | ||||
| 
 | ||||
| class mail_notification(osv.Model): | ||||
|     _inherit = 'mail.notification' | ||||
| 
 | ||||
|     # override original function | ||||
|     def get_signature_footer(self, cr, uid, user_id, res_model=None, res_id=None, context=None, user_signature=True): | ||||
|         """ Format a standard footer for notification emails (such as pushed messages | ||||
|             notification or invite emails). | ||||
|             Format: | ||||
|                 <p>--<br /> | ||||
|                     Administrator | ||||
|                 </p> | ||||
|                 <div> | ||||
|                     <small>Sent from <a ...>Your Company</a> using <a ...>OpenERP</a>.</small> | ||||
|                 </div> | ||||
|         """ | ||||
|         footer = "" | ||||
|         if not user_id: | ||||
|             return footer | ||||
| 
 | ||||
|         # add user signature | ||||
|         user = self.pool.get("res.users").browse(cr, SUPERUSER_ID, [user_id], context=context)[0] | ||||
|         if user_signature: | ||||
|             if user.signature: | ||||
|                 signature = user.signature | ||||
|             else: | ||||
|                 signature = "--<br />%s" % user.name | ||||
|             footer = tools.append_content_to_html(footer, signature, plaintext=False) | ||||
| 
 | ||||
|         # add company signature | ||||
| #         if user.company_id.website: | ||||
| #             website_url = ('http://%s' % user.company_id.website) if not user.company_id.website.lower().startswith(('http:', 'https:')) \ | ||||
| #                 else user.company_id.website | ||||
| #             company = "<a style='color:inherit' href='%s'>%s</a>" % (website_url, user.company_id.name) | ||||
| #         else: | ||||
| #             company = user.company_id.name | ||||
| #         sent_by = _('Sent by %(company)s using %(odoo)s') | ||||
| #  | ||||
| #         signature_company = '<br /><small>%s</small>' % (sent_by % { | ||||
| #             'company': company, | ||||
| #             'odoo': "<a style='color:inherit' href='https://www.odoo.com/'>Odoo</a>" | ||||
| #         }) | ||||
| #         footer = tools.append_content_to_html(footer, signature_company, plaintext=False, container_tag='div') | ||||
| 
 | ||||
|         return footer | ||||
|  | @ -0,0 +1,7 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <openerp> | ||||
| 	<data noupdate="1"> | ||||
|          | ||||
|         | ||||
| 	</data> | ||||
| </openerp> | ||||
|  | @ -0,0 +1,68 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <openerp> | ||||
| 	<data> | ||||
| 
 | ||||
| 		<record id="base.action_partner_form" model="ir.actions.act_window"> | ||||
| 			<field name="view_mode">tree,kanban,form</field> | ||||
| 		</record> | ||||
| 
 | ||||
| 		<record id="base.action_partner_form_view1" model="ir.actions.act_window.view"> | ||||
| 			<field eval="10" name="sequence" /> | ||||
| 		</record> | ||||
| 
 | ||||
| 		<record id="partner_section_form" model="ir.ui.view"> | ||||
| 			<field name="name">partner_section_form</field> | ||||
| 			<field name="model">res.partner</field> | ||||
| 			<field name="inherit_id" ref="base.view_partner_form" /> | ||||
| 			<field name="arch" type="xml">				 | ||||
|                 <xpath expr="//div[@class='address_format'][1]" position="replace"> | ||||
|                     <div class="address_format"> | ||||
|                         <field name="zip" placeholder="PLZ" style="width: 15%%"/> | ||||
|                         <field name="city" placeholder="Stadt" style="width: 84%%"/>  | ||||
|                         <field name="state_id" invisible="1"/> | ||||
|                     </div> | ||||
|                 </xpath> | ||||
|                  | ||||
|                 <xpath expr="//form[@string='Contact']//div[@class='address_format']" position="replace"> | ||||
|                     <div class="address_format"> | ||||
|                         <field name="zip" placeholder="PLZ" style="width: 15%%"/> | ||||
|                         <field name="city" placeholder="Stadt" style="width: 84%%"/>  | ||||
|                         <field name="state_id" invisible="1"/> | ||||
|                     </div> | ||||
|                 </xpath>				 | ||||
| 			</field> | ||||
| 		</record> | ||||
|          | ||||
|         <!--  Hide product variants --> | ||||
|         <record id="product_template_variant_kanban" model="ir.ui.view"> | ||||
|             <field name="name">product_template_variant_kanban</field> | ||||
|             <field name="model">product.template</field> | ||||
|             <field name="inherit_id" ref="product.product_template_kanban_view"/> | ||||
|             <field name="arch" type="xml">  | ||||
|                 <a name="%(product.product_variant_action)d" position="replace"/>   | ||||
|             </field>                             | ||||
|         </record>    | ||||
|          | ||||
| 
 | ||||
|         <record id="product_template_custom_tree" model="ir.ui.view"> | ||||
|             <field name="name">product_template_custom_tree</field> | ||||
|             <field name="model">product.template</field> | ||||
|             <field name="inherit_id" ref="product.product_template_tree_view"/> | ||||
|             <field name="arch" type="xml">  | ||||
|                 <field name="name" position="before"> | ||||
|                     <field name="default_code"/> | ||||
|                 </field> | ||||
|                 <field name="name" position="after"> | ||||
|                     <field name="list_price"/> | ||||
|                 </field> | ||||
|                 <field name="state" position="replace"/> | ||||
|             </field>                             | ||||
|         </record>        | ||||
|          | ||||
|         <record id="product.product_template_action" model="ir.actions.act_window"> | ||||
|             <field name="view_mode">tree,form,kanban</field> | ||||
|             <field name="view_id"></field> | ||||
|         </record>   | ||||
|      | ||||
| 	</data> | ||||
| </openerp> | ||||
| After Width: | Height: | Size: 2.8 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
|  | @ -0,0 +1,11 @@ | |||
| <openerp> | ||||
| 	<data> | ||||
| 
 | ||||
|     <template id="custom_header" inherit_id="web.layout" name="Custom Header"> | ||||
|         <xpath expr="//link[@rel='shortcut icon']" position="replace"> | ||||
|             <link rel="shortcut icon" href="/cam_custom/static/src/img/favicon.ico" type="image/x-icon"/> | ||||
|         </xpath> | ||||
|     </template> | ||||
| 
 | ||||
| 	</data> | ||||
| </openerp> | ||||
|  | @ -0,0 +1,23 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution | ||||
| #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU Affero General Public License as | ||||
| #    published by the Free Software Foundation, either version 3 of the | ||||
| #    License, or (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU Affero General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU Affero General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | ||||
| 
 | ||||
|  | @ -0,0 +1,40 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution | ||||
| #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU Affero General Public License as | ||||
| #    published by the Free Software Foundation, either version 3 of the | ||||
| #    License, or (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU Affero General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU Affero General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| 
 | ||||
| { | ||||
|     'name': 'Max. Width for Form View', | ||||
|     'category': 'Custom',  | ||||
|     'version': '1.0', | ||||
|     'description': """ | ||||
|     """, | ||||
|     'author': 'camadeus GmbH', | ||||
|     'website': 'http://www.camadeus.at', | ||||
|     'depends': [], | ||||
|     'data': [ | ||||
|              'views/max_width.xml',    | ||||
|         ],   | ||||
|     'installable': True, | ||||
|     'sequence': 150, | ||||
|     'auto_install': False, | ||||
| } | ||||
| 
 | ||||
| # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | ||||
| After Width: | Height: | Size: 2.8 KiB | 
|  | @ -0,0 +1,10 @@ | |||
| .openerp .oe_followers .oe_invite { | ||||
|   float: none !important; | ||||
|   display: block; | ||||
|   padding-left: 0px; | ||||
| } | ||||
| 
 | ||||
| .openerp .oe_form_sheet_width { | ||||
|   max-width: 95%; | ||||
| } | ||||
| 
 | ||||
|  | @ -0,0 +1,12 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <!-- vim:fdn=3: | ||||
| --> | ||||
| <openerp> | ||||
|     <data> | ||||
|         <template id="assets_backend" name="mail assets" inherit_id="web.assets_backend"> | ||||
|             <xpath expr="." position="inside"> | ||||
|                 <link rel="stylesheet" href="/cam_max_width/static/src/css/max_width.css"/> | ||||
|             </xpath> | ||||
|         </template> | ||||
|     </data> | ||||
| </openerp> | ||||
|  | @ -0,0 +1,24 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution | ||||
| #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU Affero General Public License as | ||||
| #    published by the Free Software Foundation, either version 3 of the | ||||
| #    License, or (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU Affero General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU Affero General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| import cam_reports | ||||
| # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | ||||
| 
 | ||||
|  | @ -0,0 +1,37 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution | ||||
| #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU Affero General Public License as | ||||
| #    published by the Free Software Foundation, either version 3 of the | ||||
| #    License, or (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU Affero General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU Affero General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| 
 | ||||
| { | ||||
|     'name': 'Camadeus Reports', | ||||
|     'category': 'Custom',  | ||||
|     'version': '1.0', | ||||
|     'description': """Individuelle Dokumentenvorlagen""", | ||||
|     'author': 'camadeus GmbH', | ||||
|     'website': 'http://www.camadeus.at', | ||||
|     'depends': ['purchase','sale','account','stock'], | ||||
|     'data': ['reports_data.xml',        | ||||
|     ], | ||||
|     'installable': True, | ||||
|     'auto_install': False, | ||||
| } | ||||
| 
 | ||||
| # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | ||||
|  | @ -0,0 +1,55 @@ | |||
| # -*- encoding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution     | ||||
| #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved | ||||
| #    $Id$ | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU General Public License as published by | ||||
| #    the Free Software Foundation, either version 3 of the License, or | ||||
| #    (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| from openerp.osv import fields, osv | ||||
| import openerp.modules as addons | ||||
| import os | ||||
| import base64 | ||||
| 
 | ||||
| class res_company(osv.osv): | ||||
|     _inherit = 'res.company' | ||||
|      | ||||
|     def get_image(self, img): | ||||
|          | ||||
|         def _get_dir(): | ||||
|             styles_dir = 'pittoresk_reports/static/src/img' | ||||
|             adps = addons.module.ad_paths         | ||||
|             for adp in adps: | ||||
|                 dir = os.path.join(adp, styles_dir) | ||||
|                 if os.path.isdir(dir):                 | ||||
|                     return dir         | ||||
|             return False | ||||
| 
 | ||||
|         def _get_file_data(filename): | ||||
|             try: | ||||
|                 f = open(filename , 'rb') | ||||
|                 data = base64.b64encode(f.read()) | ||||
|                 f.close() | ||||
|                 return data | ||||
|             except: | ||||
|                 print "Error openening file '%s'." % (filename) | ||||
|                 return False     | ||||
|          | ||||
|         path = _get_dir() | ||||
|         fname = os.path.join(path, img)  | ||||
|         img_data = _get_file_data(fname) | ||||
|         return img_data | ||||
|  | @ -0,0 +1,208 @@ | |||
| <?xml version="1.0"?> | ||||
| <!--   | ||||
|     <reports> | ||||
|         <report>account.report_invoice</report> | ||||
|     </reports> | ||||
| --> | ||||
| <document filename="Rechnung.pdf"> | ||||
|   <template pageSize="(595.0,842.0)" title="Sale Order" author="Andreas Brückl" allowSplitting="20"> | ||||
|     <pageTemplate id="first"> | ||||
|       <frame id="first" x1="15.0" y1="42.0" width="539" height="758"/> | ||||
|     </pageTemplate> | ||||
|   </template> | ||||
|    | ||||
|   <story> | ||||
|    | ||||
|     <para> | ||||
|       <seqReset id="L1"/> | ||||
|     </para> | ||||
|     <para>[[repeatIn(objects,'o')]] [[ setLang(o.partner_id.commercial_partner_id.lang)]]</para> | ||||
| 
 | ||||
| 
 | ||||
|     <para style="fett">[[ o.partner_id.commercial_partner_id.name ]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.commercial_partner_id.id != o.partner_id.id and o.partner_id.name) or '' ]] </para> | ||||
|     <para style="normal">[[ (o.partner_id.street ) or '']]</para> | ||||
|     <para style="normal">[[ (o.partner_id.street2) or removeParentNode('para') ]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.zip) or '' ]] [[ (o.partner_id and o.partner_id.city) or '' ]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.state_id and o.partner_id.state_id.name) or removeParentNode('para')]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.country_id and o.partner_id.country_id.name) or '' ]]</para> | ||||
|         | ||||
|     <blockTable colWidths="90,110" style="Struktur" hAlign="RIGHT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para style="normal">Kundennr.:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|             <para style="normal">[[ o.partner_id.ref or removeParentNode('tr') ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para style="normal">Ihre Referenz:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|             <para style="normal">[[ o.name ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para style="normal">Ansprechpartner:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|             <para style="normal">[[ (o.user_id and o.user_id.name) or '' ]]</para> | ||||
|         </td> | ||||
|       </tr>   | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para style="normal">Ihre UID:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|             <para style="normal">[[ o.partner_id.commercial_partner_id and o.partner_id.commercial_partner_id.vat or '' ]]</para> | ||||
|         </td> | ||||
|       </tr>                                                                                                      | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para style="normal">Datum:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|             <para style="normal">[[ formatLang(o.date_invoice,date = True) ]]</para> | ||||
|         </td> | ||||
|       </tr>                                        | ||||
|     </blockTable>     | ||||
|      | ||||
| 
 | ||||
| 
 | ||||
|    <para style="ueberschrift"><b>Rechnung [[ ((o.type == 'out_invoice' and (o.state == 'open' or o.state == 'paid')) or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para> | ||||
|    <para style="ueberschrift"><b>PRO-FORMA [[ ((o.type == 'out_invoice' and o.state == 'proforma2') or removeParentNode('para')) and '' ]]</b></para> | ||||
|    <para style="ueberschrift"><b>Rechnungsentwurf [[ ((o.type == 'out_invoice' and o.state == 'draft') or removeParentNode('para')) and '' ]]</b></para> | ||||
|    <para style="ueberschrift"><b>Stornierte Rechnung [[ ((o.type == 'out_invoice' and o.state == 'cancel') or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para> | ||||
|    <para style="ueberschrift"><b>Stornorechnung [[ (o.type=='out_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para> | ||||
|    <para style="ueberschrift"><b>Stornorechnung [[ (o.type=='in_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para> | ||||
|    <para style="ueberschrift"><b>Rechnung [[ (o.type=='in_invoice' or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para> | ||||
| 
 | ||||
|      | ||||
|     <spacer length="0.5cm"/> | ||||
|      | ||||
|     <blockTable colWidths="30,57,203,45,60,40,75" repeatRows="1" style="TabelleHaupt" hAlign="LEFT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|           <para style="tabelle_header">Pos</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header">Art-nr.</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header_links">Bezeichnung</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header">Menge</para> | ||||
|         </td>         | ||||
|         <td> | ||||
|           <para style="tabelle_header_rechts">E-Preis</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header"></para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header_rechts">Gesamtpreis</para> | ||||
|         </td> | ||||
|       </tr> | ||||
| 
 | ||||
|       <tr>[[repeatIn(o.invoice_line,'line')]] | ||||
|         <td> | ||||
|           <para style="tabelle_daten_center" leftIndent="0" bulletIndent="0" size="8.0"> | ||||
|             <seq id="L1"/> | ||||
|           </para>           | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_daten_center">[[ line.product_id and line.product_id.default_code or '']]</para> | ||||
|         </td> | ||||
|         <td> | ||||
|             <para style="tabelle_daten_links">[[ (line.name or '').split('\n\n')[0] ]]</para> | ||||
|             <section>[[ repeatIn((line.name or '').split('\n\n')[1:],'paragraphs') ]] | ||||
|                 <spacer length="0.4cm"/>             | ||||
|                 <para style="tabelle_daten_links">[[ paragraphs ]]</para>    | ||||
|             </section>            | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_daten_center">[[formatLang(line.quantity, digits=2)[-2:]=='00' and formatLang(line.quantity, digits=0) or formatLang(line.quantity, digits=2)]]</para> | ||||
|         </td>         | ||||
|         <td> | ||||
|           <para style="tabelle_daten_rechts">[[ formatLang(line.price_unit,digits=2) ]]</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_daten_rechts">[[ line.discount <> 0 and (formatLang(line.discount) + '%') or '' ]]</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_daten_rechts">[[ formatLang(line.price_subtotal,digits=2 ) ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|     </blockTable> | ||||
|   | ||||
|     <blockTable colWidths="210,200,100" style="TabelleSchlussrechnung"> | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para></para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">Zwischensumme in €</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">[[ formatLang(o.amount_untaxed,digits=2 )]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para></para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">MwSt. in €</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">[[ formatLang(o.amount_tax,digits=2 ) ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para></para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung_fett">Rechnungsbetrag in €</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung_fett">[[ formatLang(o.amount_total,digits=2 ) ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|     </blockTable>  | ||||
|      | ||||
|     <spacer length="0.5cm"/> | ||||
| 
 | ||||
|     <para style="normal">[[ (o.comment or '').split('\n\n')[0] ]]</para> | ||||
|     <section>[[ repeatIn((o.comment or '').split('\n\n')[1:],'paragraphs') ]] | ||||
|         <spacer length="0.4cm"/>             | ||||
|         <para style="normal">[[ paragraphs ]]</para>    | ||||
|     </section>  | ||||
| 
 | ||||
|     <spacer length="0.5cm"/> | ||||
| 
 | ||||
|     <blockTable colWidths="110,300" style="Struktur" hAlign="LEFT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|           <para style="normal">Zahlungsbedingungen:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="normal">[[ (o.payment_term and o.payment_term.note) or removeParentNode('blockTable') ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|     </blockTable> | ||||
|      | ||||
|     <spacer length="0.5cm"/> | ||||
|     <para style="normal">Vielen Dank für Ihren Auftrag!</para> | ||||
|     <spacer length="0.5cm"/> | ||||
|     <para style="normal"> | ||||
|         Bis zur Bezahlung aller Ansprüche aus den Geschäftsverbindungen behält sich der Verkäufer das Eigentum an seinen Warenlieferungen vor. Es gelten unsere Allgemeinen Geschäftsbedingungen. | ||||
|     </para> | ||||
| 
 | ||||
|      | ||||
|   </story> | ||||
| </document> | ||||
|  | @ -0,0 +1,103 @@ | |||
| <header> | ||||
|     <pageTemplate> | ||||
|         <frame id="first" x1="1.5cm" y1="4cm" height="21.1cm" width="18.5cm"/> | ||||
|          <stylesheet> | ||||
|             <!-- Set here the default font to use for all <para> tags --> | ||||
|             <paraStyle name='Normal' fontName="Helvetica"/> | ||||
|             <paraStyle name="footer"  fontName="Helvetica" leading="8" fontSize="7.0" alignment="LEFT"/> | ||||
|             <paraStyle name="footer_rechts"  fontName="Helvetica" leading="8" fontSize="7.0" alignment="RIGHT"/> | ||||
|             <paraStyle name="header_fett"  fontName="Helvetica-Bold" fontSize="7.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/> | ||||
|             <paraStyle name="header"  fontName="Helvetica" fontSize="7.0" leading="8" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/> | ||||
|             <paraStyle name="Absender"  fontName="Helvetica" fontSize="7.0" leading="8" alignment="LEFT" spaceAfter="0.0"/> | ||||
| 
 | ||||
|             <paraStyle name="normal" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" /> | ||||
|             <paraStyle name="fett" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT"/> | ||||
|             <paraStyle name="ueberschrift" fontName="Helvetica-Bold" fontSize="10.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/> | ||||
|              | ||||
|             <paraStyle name="tabelle_header" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER"/> | ||||
|             <paraStyle name="tabelle_header_links" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT"/> | ||||
|             <paraStyle name="tabelle_header_rechts" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT"/> | ||||
|             <paraStyle name="tabelle_daten_center" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER"/> | ||||
|             <paraStyle name="tabelle_daten_links" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT"/> | ||||
|             <paraStyle name="tabelle_daten_links_italic" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT"/> | ||||
|             <paraStyle name="tabelle_daten_rechts" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT"/> | ||||
|              | ||||
|             <paraStyle name="schlussrechnung" fontName="Helvetica" fontSize="9.0" leading="10" alignment="RIGHT"/> | ||||
|             <paraStyle name="schlussrechnung_fett" fontName="Helvetica-Bold" fontSize="9.0" leading="10" alignment="RIGHT"/> | ||||
|             <paraStyle name="skonto" fontName="Helvetica" fontSize="7.0" leading="10" alignment="RIGHT"/> | ||||
|              | ||||
|             <!--  Tabellen --> | ||||
|             <blockTableStyle id="Struktur"> | ||||
|               <blockAlignment value="LEFT"/> | ||||
|               <blockValign value="TOP"/> | ||||
|               <blockTopPadding length="0"/> | ||||
|               <blockBottomPadding length="0"/>       | ||||
|               <blockLeftPadding length="0"/>       | ||||
|               <blockRightPadding length="0"/>       | ||||
|             </blockTableStyle> | ||||
|          | ||||
|             <blockTableStyle id="TabelleHaupt"> | ||||
|               <blockAlignment value="LEFT"/> | ||||
|               <blockValign value="MIDDLE"/> | ||||
|               <lineStyle kind="LINEBELOW" colorName="#000000" thickness="0.5"/> | ||||
|               <lineStyle kind="LINEBELOW" colorName="#000000" start="0,0" stop="-1,0" thickness="1"/> | ||||
|               <lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="-1,-1" thickness="1"/> | ||||
|             </blockTableStyle> | ||||
|          | ||||
|             <blockTableStyle id="TabelleSchlussrechnung"> | ||||
|               <blockValign value="MIDDLE"/>  | ||||
|             </blockTableStyle>             | ||||
|          </stylesheet> | ||||
|         <pageGraphics> | ||||
|             <!-- Logo --> | ||||
|             <image x="13cm" y="26.75cm" height="46" width="180" preserveAspectRatio="1" >[[ company.logo]]</image> | ||||
| 
 | ||||
|             <!-- Absenderkopf --> | ||||
|             <place x="1.5cm" y="24.5cm" height="1.5cm" width="14cm"> | ||||
|                 <para style="header"><u>[[ company.partner_id.name ]], [[ company.partner_id.street ]], [[ company.partner_id.zip ]] [[ company.partner_id.city ]]</u></para> | ||||
|             </place> | ||||
|              | ||||
|             <!-- Seitenzahl --> | ||||
|             <setFont name="Helvetica" size="9"/> | ||||
|             <drawRightString x="18.9cm" y="3.5cm">Seite <pageNumber/> </drawRightString> | ||||
| 
 | ||||
|             <!-- Seperator --> | ||||
|             <fill color="#000000"/> | ||||
|             <rect x="1.4cm" y="3.1cm" width="17.5cm" height="0.01cm" fill="yes" stroke="no"/>              | ||||
|              | ||||
|             <!-- Footer links --> | ||||
|             <place x="1.5cm" y="0cm" height="3cm" width="7cm"> | ||||
|                 <para style="footer">--</para> | ||||
|                 <para style="footer">--</para> | ||||
|                 <para style="footer">--</para> | ||||
|                 <para style="footer"></para> | ||||
|                 <para style="footer"></para> | ||||
|                 <para style="footer"></para> | ||||
|             </place> | ||||
|              | ||||
|             <!-- Footer Mitte --> | ||||
|             <place x="8cm" y="0cm" height="3cm" width="7cm"> | ||||
|                 <para style="footer">[[ company.partner_id.street ]]</para> | ||||
|                 <para style="footer">[[ company.partner_id.zip ]] [[ company.partner_id.city ]]</para> | ||||
|                 <para style="footer">UID: [[company.vat ]]</para> | ||||
|                 <para style="footer"></para> | ||||
|                 <para style="footer"></para> | ||||
|                 <para style="footer"></para> | ||||
|             </place>             | ||||
|              | ||||
|             <!-- Footer rechts --> | ||||
|             <place x="15cm" y="0cm" height="3cm" width="7cm"> | ||||
|                 <para style="footer"></para> | ||||
|                 <para style="footer"></para> | ||||
|                 <para style="footer"></para> | ||||
|                 <para style="footer"></para> | ||||
|                 <para style="footer"></para> | ||||
|                 <para style="footer"></para> | ||||
|                 <para style="footer"></para> | ||||
|                 <para style="footer"></para>             | ||||
|             </place>    | ||||
| 
 | ||||
|         </pageGraphics> | ||||
| 
 | ||||
|     </pageTemplate> | ||||
| </header> | ||||
|  | @ -0,0 +1,246 @@ | |||
| <?xml version="1.0"?> | ||||
| <!--   | ||||
|     <reports> | ||||
|         <report>purchase.report_purchaseorder</report> | ||||
|     </reports> | ||||
| --> | ||||
| <document filename="Purchase Quotation.pdf"> | ||||
|   <template pageSize="(595.0,842.0)" title="Purchase Order" author="andreas.brueckl@cmotion.eu" allowSplitting="20"> | ||||
|     <pageTemplate id="first"> | ||||
|       <frame id="first" x1="15.0" y1="42.0" width="539" height="758"/> | ||||
|     </pageTemplate> | ||||
|   </template> | ||||
| 
 | ||||
|   <story> | ||||
|     <para> | ||||
|       <seqReset id="L1"/> | ||||
|     </para>   | ||||
|     <para>[[repeatIn(objects,'o')]] [[ setLang(o.partner_id.commercial_partner_id.lang)]]</para> | ||||
|     | ||||
|     <para style="fett">[[ o.partner_id.commercial_partner_id.name ]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.commercial_partner_id.id != o.partner_id.id and o.partner_id.name) or '' ]] </para> | ||||
|     <para style="normal">[[ (o.partner_id.street ) or '']]</para> | ||||
|     <para style="normal">[[ (o.partner_id.street2) or removeParentNode('para') ]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.zip) or '' ]] [[ (o.partner_id.city) or '' ]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.state_id and o.partner_id.state_id.name) or removeParentNode('para')]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.country_id and o.partner_id.country_id.name) or '' ]]</para> | ||||
| 
 | ||||
|      | ||||
|     <blockTable colWidths="100,150" style="Struktur" hAlign="RIGHT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|         </td> | ||||
|         <td align="right"> | ||||
|             <para style="normal">Ihr Ansprechpartner</para> | ||||
|             <blockTable colWidths="65,165" style="Struktur"> | ||||
|               <tr> | ||||
|                 <td> | ||||
|                     <para style="normal">Name:</para> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                     <para style="normal">[[ (user.name) or '' ]]</para> | ||||
|                 </td> | ||||
|               </tr> | ||||
|               <tr> | ||||
|                 <td> | ||||
|                     <para style="normal">Telefon:</para> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                     <para style="normal">[[ user.partner_id.phone or '' ]]</para> | ||||
|                 </td> | ||||
|               </tr>   | ||||
|               <tr> | ||||
|                 <td> | ||||
|                     <para style="normal">E-Mail:</para> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                     <para style="normal">[[ user.partner_id.email or '' ]]</para> | ||||
|                 </td> | ||||
|               </tr>    | ||||
|               <tr> | ||||
|                 <td> | ||||
|                     <spacer length="0.5cm"/> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                    <spacer length="0.5cm"/> | ||||
|                 </td> | ||||
|               </tr>                                    | ||||
|               <tr> | ||||
|                 <td> | ||||
|                     <para style="normal">Datum:</para> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                     <para style="normal">[[ formatLang(time.strftime('%Y-%m-%d'),date=True) ]]</para> | ||||
|                 </td> | ||||
|               </tr>                | ||||
|               <tr> | ||||
|                 <td> | ||||
|                     <para style="normal">Referenz:</para> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                     <para style="normal">[[ o.partner_ref or '' ]]</para> | ||||
|                 </td> | ||||
|               </tr>                                                                | ||||
|             </blockTable> | ||||
|         </td> | ||||
|       </tr> | ||||
|     </blockTable> | ||||
|          | ||||
| 
 | ||||
|     <para style="ueberschrift">Bestellung [[ o.name ]]</para> | ||||
|    | ||||
|     <spacer length="0.5cm"/> | ||||
|      | ||||
|     <blockTable colWidths="30.0, 57, 213.0, 60, 45, 55.0, 60.0" repeatRows="1" style="TabelleHaupt" hAlign="LEFT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|           <para style="tabelle_header">Pos</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header_links">Art.nr.</para> | ||||
|         </td>                                | ||||
|         <td> | ||||
|           <para style="tabelle_header_links">Bezeichnung</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header">gepl.</para> | ||||
|           <para style="tabelle_header">Lieferung</para> | ||||
|         </td>                 | ||||
|         <td> | ||||
|           <para style="tabelle_header">Menge</para> | ||||
|         </td>          | ||||
|         <td> | ||||
|           <para style="tabelle_header_rechts">E-Preis</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header_rechts">G-Preis</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|         <tr>[[repeatIn(o.order_line,'line')]] | ||||
| 	  <td> | ||||
| 	    <para style="tabelle_daten_center" leftIndent="0" bulletIndent="0" size="8.0"> | ||||
| 	      <seq id="L1"/> | ||||
| 	    </para> | ||||
| 	  </td> | ||||
| 	      <td> | ||||
|             <para style="tabelle_daten_links">[[ line.product_id and line.product_id.default_code ]]</para> | ||||
|           </td>  | ||||
|           <td> | ||||
|             <para style="tabelle_daten_links">[[ (line.name or '').split('\n\n')[0] ]]</para> | ||||
|             <section>[[ repeatIn((line.name or '').split('\n\n')[1:],'paragraphs') ]] | ||||
|                 <spacer length="0.4cm"/>             | ||||
|                 <para style="tabelle_daten_links">[[ paragraphs ]]</para>    | ||||
|             </section> | ||||
|               | ||||
|             <para style="tabelle_daten_links">Ihre Artikelnr.: [[ line.supplier_code or removeParentNode('para')]]</para> | ||||
|           </td>	   | ||||
|           <td> | ||||
|             <para style="tabelle_daten_center">[[ formatLang(line.date_planned,date=True) ]]</para> | ||||
|           </td>	           | ||||
|                                | ||||
|           <td> | ||||
|             <para style="tabelle_daten_center">[[ formatLang(line.product_qty, digits=2)[-2:]=='00' and formatLang(line.product_qty, digits=0) or formatLang(line.product_qty, digits=2) ]]</para> | ||||
|           </td>          | ||||
|           <td> | ||||
|             <para style="tabelle_daten_rechts">[[ formatLang(line.price_unit, digits=2) ]]</para> | ||||
|           </td> | ||||
|           <td> | ||||
|             <para style="tabelle_daten_rechts">[[ formatLang(line.price_subtotal, digits=2) ]]</para> | ||||
|           </td> | ||||
|         </tr> | ||||
|       </blockTable> | ||||
|        | ||||
|      | ||||
|      | ||||
|     <blockTable colWidths="180,205,70, 80" style="TabelleSchlussrechnung"> | ||||
|       <tr>[[ o.amount_tax > 0 or removeParentNode('tr') ]] | ||||
|         <td> | ||||
|           <para style="schlussrechnung"></para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">Nettobetrag in €:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">[[o.pricelist_id.currency_id.name]]</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">[[ formatLang(o.amount_untaxed, digits=2)]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|       <tr>[[ o.amount_tax > 0 or removeParentNode('tr') ]] | ||||
|         <td> | ||||
|           <para style="schlussrechnung"></para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">MwSt. in €:</para> | ||||
|         </td> | ||||
|          <td> | ||||
|           <para style="schlussrechnung">[[ o.pricelist_id.currency_id.name ]]</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">[[ formatLang(o.amount_tax, digits=2) ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|       <tr> | ||||
|         <td> | ||||
|           <para style="schlussrechnung_fett"></para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung_fett">Gesamt in €:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung_fett">[[ o.pricelist_id.currency_id.name ]]</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung_fett">[[ formatLang(o.amount_total,digits=2) ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|     </blockTable> | ||||
| 
 | ||||
|     <spacer length="0.5cm"/> | ||||
| 
 | ||||
|     <para style="normal">[[ (o.notes or '').split('\n\n')[0] ]]</para> | ||||
|     <section>[[ repeatIn((o.notes or '').split('\n\n')[1:],'paragraphs') ]] | ||||
|         <spacer length="0.4cm"/>             | ||||
|         <para style="normal">[[ paragraphs ]]</para>    | ||||
|     </section>  | ||||
| 
 | ||||
|     <spacer length="0.5cm"/> | ||||
|          | ||||
|     <blockTable colWidths="110,300" style="Struktur" hAlign="LEFT"> [[o.incoterm_id or removeParentNode('blockTable')  ]] | ||||
|       <tr> | ||||
|         <td> | ||||
|           <para style="normal">Lieferbedingung:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="normal">[[o.incoterm_id and o.incoterm_id.name or '' ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|      </blockTable> | ||||
|     <blockTable colWidths="110,300" style="Struktur" hAlign="LEFT"> [[o.payment_term_id or removeParentNode('blockTable')  ]] | ||||
|       <tr> | ||||
|         <td> | ||||
|           <para style="normal">Zahlungsbedingungen:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="normal">[[o.payment_term_id and o.payment_term_id.note or '' ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|      </blockTable>  | ||||
| 
 | ||||
| 
 | ||||
|     <spacer length="0.5cm"/> | ||||
| 
 | ||||
|     <para style="normal">Mit freundlichen Grüßen,</para> | ||||
|     <spacer length="0.3cm"/> | ||||
|     <blockTable colWidths="200" style="Struktur" hAlign="LEFT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|           <image>[[ company.signature]]</image> | ||||
|         </td> | ||||
|       </tr> | ||||
|     </blockTable>     | ||||
|     <para style="normal">B. Neumeier</para> | ||||
|      | ||||
|   </story> | ||||
| </document> | ||||
|  | @ -0,0 +1,188 @@ | |||
| <?xml version="1.0"?> | ||||
| <!--   | ||||
|     <reports> | ||||
|         <report>purchase.report_purchasequotation</report> | ||||
|     </reports> | ||||
| --> | ||||
| <document filename="Purchase Quotation.pdf"> | ||||
|   <template pageSize="(595.0,842.0)" title="Purchase Order" author="andreas.brueckl@cmotion.eu" allowSplitting="20"> | ||||
|     <pageTemplate id="first"> | ||||
|       <frame id="first" x1="15.0" y1="42.0" width="539" height="758"/> | ||||
|     </pageTemplate> | ||||
|   </template> | ||||
| 
 | ||||
|   <story> | ||||
|     <para> | ||||
|       <seqReset id="L1"/> | ||||
|     </para>   | ||||
|     <para>[[repeatIn(objects,'o')]] [[ setLang(o.partner_id.commercial_partner_id.lang)]]</para> | ||||
|     | ||||
|     <para style="fett">[[ o.partner_id.commercial_partner_id.name ]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.commercial_partner_id.id != o.partner_id.id and o.partner_id.name) or '' ]] </para> | ||||
|     <para style="normal">[[ (o.partner_id.street ) or '']]</para> | ||||
|     <para style="normal">[[ (o.partner_id.street2) or removeParentNode('para') ]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.zip) or '' ]] [[ (o.partner_id.city) or '' ]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.state_id and o.partner_id.state_id.name) or removeParentNode('para')]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.country_id and o.partner_id.country_id.name) or '' ]]</para> | ||||
| 
 | ||||
|      | ||||
|     <blockTable colWidths="100,150" style="Struktur" hAlign="RIGHT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|         </td> | ||||
|         <td align="right"> | ||||
|             <para style="normal">Ihr Ansprechpartner</para> | ||||
|             <blockTable colWidths="65,165" style="Struktur"> | ||||
|               <tr> | ||||
|                 <td> | ||||
|                     <para style="normal">Name:</para> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                     <para style="normal">[[ (user.name) or '' ]]</para> | ||||
|                 </td> | ||||
|               </tr> | ||||
|               <tr> | ||||
|                 <td> | ||||
|                     <para style="normal">Telefon:</para> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                     <para style="normal">[[ user.partner_id.phone or '' ]]</para> | ||||
|                 </td> | ||||
|               </tr>   | ||||
|               <tr> | ||||
|                 <td> | ||||
|                     <para style="normal">E-Mail:</para> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                     <para style="normal">[[ user.partner_id.email or '' ]]</para> | ||||
|                 </td> | ||||
|               </tr>    | ||||
|               <tr> | ||||
|                 <td> | ||||
|                     <spacer length="0.5cm"/> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                    <spacer length="0.5cm"/> | ||||
|                 </td> | ||||
|               </tr>                        | ||||
|              | ||||
|               <tr> | ||||
|                 <td> | ||||
|                     <para style="normal">Datum:</para> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                     <para style="normal">[[ formatLang(time.strftime('%Y-%m-%d'),date=True) ]]</para> | ||||
|                 </td> | ||||
|               </tr>                | ||||
|               <tr> | ||||
|                 <td> | ||||
|                     <para style="normal">Referenz:</para> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                     <para style="normal">[[ o.partner_ref or '' ]]</para> | ||||
|                 </td> | ||||
|               </tr>                                                                | ||||
|             </blockTable> | ||||
|         </td> | ||||
|       </tr> | ||||
|     </blockTable> | ||||
|          | ||||
| 
 | ||||
|     <para style="ueberschrift">Anfrage [[ o.name ]]</para> | ||||
|    | ||||
|     <spacer length="0.5cm"/> | ||||
|      | ||||
|     <blockTable colWidths="30.0, 57, 328.0, 60, 45" repeatRows="1" style="TabelleHaupt" hAlign="LEFT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|           <para style="tabelle_header">Pos</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header_links">Art.nr.</para> | ||||
|         </td>                                | ||||
|         <td> | ||||
|           <para style="tabelle_header_links">Bezeichnung</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header">gepl.</para> | ||||
|           <para style="tabelle_header">Lieferung</para> | ||||
|         </td>                 | ||||
|         <td> | ||||
|           <para style="tabelle_header">Menge</para> | ||||
|         </td>          | ||||
|       </tr> | ||||
|         <tr>[[repeatIn(o.order_line,'line')]] | ||||
|       <td> | ||||
|         <para style="tabelle_daten_center" leftIndent="0" bulletIndent="0" size="8.0"> | ||||
|           <seq id="L1"/> | ||||
|         </para> | ||||
|       </td> | ||||
|           <td> | ||||
|             <para style="tabelle_daten_links">[[ line.product_id and line.product_id.default_code ]]</para> | ||||
|           </td>  | ||||
|           <td> | ||||
|             <para style="tabelle_daten_links">[[ (line.name or '').split('\n\n')[0] ]]</para> | ||||
|             <section>[[ repeatIn((line.name or '').split('\n\n')[1:],'paragraphs') ]] | ||||
|                 <spacer length="0.4cm"/>             | ||||
|                 <para style="tabelle_daten_links">[[ paragraphs ]]</para>    | ||||
|             </section> | ||||
|              | ||||
|             <para style="tabelle_daten_links">Ihre Artikelnr.: [[ line.supplier_code or removeParentNode('para')]]</para> | ||||
|           </td>    | ||||
|           <td> | ||||
|             <para style="tabelle_daten_center">[[ formatLang(line.date_planned,date=True) ]]</para> | ||||
|           </td>            | ||||
|                                | ||||
|           <td> | ||||
|             <para style="tabelle_daten_center">[[ formatLang(line.product_qty, digits=2)[-2:]=='00' and formatLang(line.product_qty, digits=0) or formatLang(line.product_qty, digits=2) ]]</para> | ||||
|           </td>          | ||||
|         </tr> | ||||
|       </blockTable> | ||||
|        | ||||
|     <spacer length="0.5cm"/> | ||||
| 
 | ||||
|     <para style="normal">[[ (o.notes or '').split('\n\n')[0] ]]</para> | ||||
|     <section>[[ repeatIn((o.notes or '').split('\n\n')[1:],'paragraphs') ]] | ||||
|         <spacer length="0.4cm"/>             | ||||
|         <para style="normal">[[ paragraphs ]]</para>    | ||||
|     </section>  | ||||
| 
 | ||||
|     <spacer length="0.5cm"/> | ||||
|          | ||||
|     <blockTable colWidths="110,300" style="Struktur" hAlign="LEFT"> [[o.incoterm_id or removeParentNode('blockTable')  ]] | ||||
|       <tr> | ||||
|         <td> | ||||
|           <para style="normal">Lieferbedingung:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="normal">[[o.incoterm_id and o.incoterm_id.name or '' ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|      </blockTable> | ||||
|     <blockTable colWidths="110,300" style="Struktur" hAlign="LEFT"> [[o.payment_term_id or removeParentNode('blockTable')  ]] | ||||
|       <tr> | ||||
|         <td> | ||||
|           <para style="normal">Zahlungsbedingungen:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="normal">[[o.payment_term_id and o.payment_term_id.note or '' ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|      </blockTable>  | ||||
| 
 | ||||
| 
 | ||||
|     <spacer length="0.5cm"/> | ||||
| 
 | ||||
|     <para style="normal">Mit freundlichen Grüßen,</para> | ||||
|     <spacer length="0.3cm"/> | ||||
|     <blockTable colWidths="200" style="Struktur" hAlign="LEFT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|           <image>[[ company.signature]]</image> | ||||
|         </td> | ||||
|       </tr> | ||||
|     </blockTable>     | ||||
|     <para style="normal">B. Neumeier</para> | ||||
|      | ||||
|   </story> | ||||
| </document> | ||||
|  | @ -0,0 +1,199 @@ | |||
| <?xml version="1.0"?> | ||||
| <!--   | ||||
|     <reports> | ||||
|         <report>sale.report_saleorder</report> | ||||
|     </reports> | ||||
| --> | ||||
| 
 | ||||
| <document filename="Sales Order.pdf"> | ||||
|   <template pageSize="(595.0,842.0)" title="Sale Order" author="Andreas Brückl" allowSplitting="20"> | ||||
|     <pageTemplate id="first"> | ||||
|       <frame id="first" x1="15.0" y1="42.0" width="539" height="758"/> | ||||
|     </pageTemplate> | ||||
|   </template> | ||||
| 
 | ||||
|   <story> | ||||
|     <para> | ||||
|       <seqReset id="L1"/> | ||||
|     </para> | ||||
|     <para>[[repeatIn(objects,'o')]] [[ setLang(o.partner_id.commercial_partner_id.lang)]]</para> | ||||
| 
 | ||||
|     <para style="fett">[[ o.partner_id.commercial_partner_id.name ]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.commercial_partner_id.id != o.partner_id.id and o.partner_id.name) or '' ]] </para> | ||||
|     <para style="normal">[[ (o.partner_id.street ) or '']]</para> | ||||
|     <para style="normal">[[ (o.partner_id.street2) or removeParentNode('para') ]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.zip) or '' ]] [[ (o.partner_id and o.partner_id.city) or '' ]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.state_id and o.partner_id.state_id.name) or removeParentNode('para')]]</para> | ||||
|     <para style="normal">[[ (o.partner_id.country_id and o.partner_id.country_id.name) or '' ]]</para> | ||||
| 
 | ||||
| 
 | ||||
|     <blockTable colWidths="100,110" style="Struktur" hAlign="RIGHT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para style="normal">Ihre Referenz:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|             <para style="normal">[[ o.client_order_ref ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para style="normal">Ansprechpartner:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|             <para style="normal">[[ (o.user_id and o.user_id.name) or '' ]]</para> | ||||
|         </td> | ||||
|       </tr>   | ||||
|       <tr> [[ o.user_id and o.user_id.phone or removeParentNode('tr') ]] | ||||
|         <td> | ||||
|             <para style="normal">Tel.:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|             <para style="normal">[[ (o.user_id and o.user_id.phone) or '' ]]</para> | ||||
|         </td> | ||||
|       </tr>       | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para style="normal">Ihre UID:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|             <para style="normal">[[ o.partner_id.commercial_partner_id and o.partner_id.commercial_partner_id.vat or '' ]]</para> | ||||
|         </td> | ||||
|       </tr>                                                                                                      | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para style="normal">Angebotsdatum:[[ o.state not in ['draft','sent'] and removeParentNode('para') ]]</para> | ||||
|             <para style="normal">Bestelldatum:[[ o.state in ['draft','sent'] and removeParentNode('para') ]]</para> | ||||
|         </td> | ||||
|         <td> | ||||
|             <para style="normal">[[ formatLang(o.date_order,date = True)  ]]</para> | ||||
|         </td> | ||||
|       </tr>                                             | ||||
|     </blockTable> | ||||
| 
 | ||||
| 
 | ||||
|     <section> | ||||
|        <para style="ueberschrift"><b>[[ o.state not in ['draft','sent'] and removeParentNode('para') ]] Angebot [[ o.name ]]</b></para> | ||||
|        <para style="ueberschrift"><b>[[ o.state in ['draft','sent'] and removeParentNode('para') ]] Bestellbestätigung [[ o.name ]]</b></para> | ||||
|     </section> | ||||
| 
 | ||||
|     <spacer length="0.5cm"/> | ||||
|      | ||||
|     <blockTable colWidths="30,57,213,45,50,40,75" repeatRows="1" style="TabelleHaupt" hAlign="LEFT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|           <para style="tabelle_header">Pos</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header">Art.nr.</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header_links">Bezeichnung</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header">Menge</para> | ||||
|         </td>         | ||||
|         <td> | ||||
|           <para style="tabelle_header_rechts">E-Preis</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header"></para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header_rechts">Gesamtpreis</para> | ||||
|         </td> | ||||
|       </tr> | ||||
| 
 | ||||
|       <tr>[[repeatIn(o.order_line,'line')]] | ||||
|         <td> | ||||
|           <para style="tabelle_daten_center" leftIndent="0" bulletIndent="0" size="8.0"> | ||||
|             <seq id="L1"/> | ||||
|           </para>           | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_daten_center">[[ line.product_id and line.product_id.default_code or '']]</para> | ||||
|         </td> | ||||
|         <td> | ||||
|             <para style="tabelle_daten_links">[[ (line.name or '').split('\n\n')[0] ]]</para> | ||||
|             <section>[[ repeatIn((line.name or '').split('\n\n')[1:],'paragraphs') ]] | ||||
|                 <spacer length="0.4cm"/>             | ||||
|                 <para style="tabelle_daten_links">[[ paragraphs ]]</para>    | ||||
|             </section>    | ||||
|         </td> | ||||
|             | ||||
|         <td> | ||||
|           <para style="tabelle_daten_center">[[ formatLang(line.product_uos and line.product_uos_qty or line.product_uom_qty, digits=0) ]]</para> | ||||
|         </td>         | ||||
|         <td> | ||||
|           <para style="tabelle_daten_rechts">[[ formatLang(line.price_unit,digits=2) ]]</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_daten_rechts">[[ line.discount <> 0 and (formatLang(line.discount) + '%') or '' ]]</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_daten_rechts">[[ formatLang(line.price_subtotal,digits=2 ) ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|     </blockTable> | ||||
|      | ||||
|     <blockTable colWidths="210,200,100" style="TabelleSchlussrechnung"> | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para></para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">Zwischensumme in €</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">[[ formatLang(o.amount_untaxed,digits=2 )]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para></para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">MwSt. in €</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung">[[ formatLang(o.amount_tax,digits=2 ) ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|       <tr> | ||||
|         <td> | ||||
|             <para></para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung_fett">Rechnungsbetrag in €</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="schlussrechnung_fett">[[ formatLang(o.amount_total,digits=2 ) ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|     </blockTable> | ||||
| 
 | ||||
|     <spacer length="0.5cm"/> | ||||
| 
 | ||||
|     <para style="normal">[[ (o.note or '').split('\n\n')[0] ]]</para> | ||||
|     <section>[[ repeatIn((o.note or '').split('\n\n')[1:],'paragraphs') ]] | ||||
|         <spacer length="0.4cm"/>             | ||||
|         <para style="normal">[[ paragraphs ]]</para>    | ||||
|     </section>       | ||||
| 
 | ||||
|     <spacer length="0.5cm"/> | ||||
| 
 | ||||
|     <blockTable colWidths="110,300" style="Struktur" hAlign="LEFT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|           <para style="normal">Zahlungsziele:</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="normal">[[ (o.payment_term and o.payment_term.note) or removeParentNode('blockTable') ]]</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|     </blockTable> | ||||
| 
 | ||||
|     <spacer length="0.5cm"/> | ||||
|      | ||||
|   </story> | ||||
| </document> | ||||
|  | @ -0,0 +1,117 @@ | |||
| <?xml version="1.0"?> | ||||
| <!--   | ||||
|     <reports> | ||||
|         <report>stock.report_picking</report> | ||||
|     </reports> | ||||
| --> | ||||
| 
 | ||||
| <document filename="test.pdf"> | ||||
|   <template pageSize="(595.0,842.0)" title="Test" author="Martin Simon" allowSplitting="20"> | ||||
|     <pageTemplate id="first"> | ||||
|       <frame id="first" x1="34.0" y1="57.0" width="504" height="728"/> | ||||
|     </pageTemplate> | ||||
|   </template> | ||||
|   | ||||
|   <story> | ||||
|     <para> | ||||
|       <seqReset id="L1"/> | ||||
|     </para>   | ||||
|      | ||||
|     <para>[[ repeatIn(objects,'picking') ]] [[ picking.partner_id and setLang(picking.partner_id.lang) ]]</para> | ||||
| 
 | ||||
|     <para style="fett">[[ picking.partner_id.commercial_partner_id.name ]]</para> | ||||
|     <para style="normal">[[ (picking.partner_id.commercial_partner_id.id != picking.partner_id.id and picking.partner_id.name) or '' ]] </para> | ||||
|     <para style="normal">[[ (picking.partner_id and picking.partner_id.street ) or '']]</para> | ||||
|     <para style="normal">[[ (picking.partner_id and picking.partner_id.street2) or removeParentNode('para') ]]</para> | ||||
|     <para style="normal">[[ (picking.partner_id and picking.partner_id.zip) or '' ]] [[ (picking.partner_id and picking.partner_id.city) or '' ]]</para> | ||||
|     <para style="normal">[[ (picking.partner_id and picking.partner_id.state_id and picking.partner_id.state_id.name) or removeParentNode('para')]]</para> | ||||
|     <para style="normal">[[ (picking.partner_id and picking.partner_id.country_id and picking.partner_id.country_id.name) or '' ]]</para> | ||||
| 
 | ||||
|      | ||||
|     <blockTable colWidths="100,110" style="Struktur" hAlign="RIGHT">          | ||||
|        <tr> | ||||
|          <td> | ||||
|              <para style="normal">Bestellung:</para> | ||||
|          </td> | ||||
|          <td> | ||||
|              <para style="normal">[[ picking.origin ]]</para> | ||||
|          </td> | ||||
|        </tr>           | ||||
|        <tr> | ||||
|          <td> | ||||
|              <para style="normal">Datum:</para> | ||||
|          </td> | ||||
|          <td> | ||||
|              <para style="normal">[[ formatLang(picking.date_done, date=True) or formatLang(time.strftime('%Y-%m-%d'),date=True) ]]</para> | ||||
|          </td> | ||||
|        </tr>         | ||||
|        <tr> | ||||
|          <td> | ||||
|              <para style="normal">Referenz:</para> | ||||
|          </td> | ||||
|          <td> | ||||
|              <para style="normal">[[ picking.sale_id and picking.sale_id.client_order_ref or '' ]]</para> | ||||
|          </td> | ||||
|        </tr>  | ||||
|        <tr> | ||||
|          <td> | ||||
|              <para style="normal">Kundennr.:</para> | ||||
|          </td> | ||||
|          <td> | ||||
|              <para style="normal">[[ picking.partner_id and picking.partner_id.commercial_partner_id and picking.partner_id.commercial_partner_id.ref or '' ]]</para> | ||||
|          </td> | ||||
|        </tr>                     | ||||
|                                                       | ||||
|     </blockTable>     | ||||
| 
 | ||||
|     <para style="ueberschrift">Lieferschein [[ picking.name ]]</para> | ||||
|   	 | ||||
| 	<spacer length="0.5cm"/> | ||||
| 	 | ||||
|     <blockTable colWidths="30,80,304,80" repeatRows="1" style="TabelleHaupt" hAlign="LEFT"> | ||||
|       <tr> | ||||
|         <td> | ||||
|           <para style="tabelle_header">Pos</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header">Art.nr.</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header_links">Bezeichnung</para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_header">Menge</para> | ||||
|         </td> | ||||
|       </tr> | ||||
|       <tr>[[ repeatIn([line for line in picking.move_lines if line.state <> 'cancel'],'move_lines') ]] | ||||
|         <td> | ||||
|           <para style="tabelle_daten_center" leftIndent="0" bulletIndent="0" size="8.0"> | ||||
|             <seq id="L1"/> | ||||
|           </para> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_daten_center">[[ move_lines.product_id.default_code ]]</para> | ||||
|         </td>         | ||||
|         <td> | ||||
|             <para style="tabelle_daten_links">[[ (move_lines.name or '').split('\n\n')[0] ]]</para> | ||||
|             <section>[[ repeatIn((move_lines.name or '').split('\n\n')[1:],'paragraphs') ]] | ||||
|                 <spacer length="0.4cm"/>             | ||||
|                 <para style="tabelle_daten_links">[[ paragraphs ]]</para>    | ||||
|             </section> | ||||
|         </td> | ||||
|         <td> | ||||
|           <para style="tabelle_daten_center">[[ formatLang(move_lines.product_qty, digits=0) ]] </para> | ||||
|         </td>         | ||||
|       </tr> | ||||
|     </blockTable> | ||||
| 
 | ||||
|     <spacer length="0.5cm"/> | ||||
| 
 | ||||
|     <para style="normal">[[ (picking.note or '').split('\n\n')[0] ]]</para> | ||||
|     <section>[[ repeatIn((picking.note or '').split('\n\n')[1:],'paragraphs') ]] | ||||
|         <spacer length="0.4cm"/>             | ||||
|         <para style="normal">[[ paragraphs ]]</para>    | ||||
|     </section>  | ||||
|      | ||||
|   </story> | ||||
| </document> | ||||
|  | @ -0,0 +1,29 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <openerp> | ||||
|     <data> | ||||
|         <record id="sale.report_sale_order" model="ir.actions.report.xml"> | ||||
|             <field name="report_rml">cam_reports/report/sale.order.rml</field> | ||||
|             <field name="report_type">pdf</field> | ||||
|         </record> | ||||
| 
 | ||||
|         <record id="stock.action_report_picking" model="ir.actions.report.xml"> | ||||
|             <field name="report_rml">cam_reports/report/stock.picking.rml</field> | ||||
|             <field name="report_type">pdf</field> | ||||
|         </record> | ||||
| 
 | ||||
|         <record id="account.account_invoices" model="ir.actions.report.xml"> | ||||
|             <field name="report_rml">cam_reports/report/account.invoice.rml</field> | ||||
|             <field name="report_type">pdf</field> | ||||
|         </record> | ||||
| 
 | ||||
|         <record id="purchase.report_purchase_quotation" model="ir.actions.report.xml"> | ||||
|             <field name="report_rml">cam_reports/report/purchase.quotation.rml</field> | ||||
|             <field name="report_type">pdf</field> | ||||
|         </record> | ||||
| 
 | ||||
|         <record id="purchase.action_report_purchase_order" model="ir.actions.report.xml"> | ||||
|             <field name="report_rml">cam_reports/report/purchase.order.rml</field> | ||||
|             <field name="report_type">pdf</field> | ||||
|         </record> | ||||
|     </data> | ||||
| </openerp> | ||||
| After Width: | Height: | Size: 2.8 KiB | 
| After Width: | Height: | Size: 6.3 KiB | 
|  | @ -0,0 +1,25 @@ | |||
| # -*- encoding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution	 | ||||
| #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved | ||||
| #    $Id$ | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU General Public License as published by | ||||
| #    the Free Software Foundation, either version 3 of the License, or | ||||
| #    (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| import controllers | ||||
| # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | ||||
| 
 | ||||
|  | @ -0,0 +1,48 @@ | |||
| # -*- encoding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution     | ||||
| #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved | ||||
| #    $Id$ | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU General Public License as published by | ||||
| #    the Free Software Foundation, either version 3 of the License, or | ||||
| #    (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| 
 | ||||
| { | ||||
|     'name': 'Test Environment', | ||||
|     'version': '1.0', | ||||
|     'category': 'Custom', | ||||
|     'description': """ | ||||
| Test Environment  | ||||
| =========================== | ||||
| * Shows the message "Test" in the background if the database matches the regular expression of the config paramter "dbfilter_test" | ||||
| * Default filter: test* | ||||
| 
 | ||||
|     """, | ||||
|     'author': 'camadeus Consulting GmbH', | ||||
|     'website': 'http://www.camadeus.at', | ||||
|     'depends': ['web','base'],  | ||||
|     'js': [ | ||||
|         'static/src/js/testenv.js', | ||||
|     ], | ||||
|     'css': [ | ||||
|         'static/src/css/testenv.css', | ||||
|     ],   | ||||
|     'update_xml': [], | ||||
|     'demo_xml': [], | ||||
|     'installable': True, | ||||
|     'active': False, | ||||
| } | ||||
|  | @ -0,0 +1,25 @@ | |||
| # -*- encoding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution	 | ||||
| #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved | ||||
| #    $Id$ | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU General Public License as published by | ||||
| #    the Free Software Foundation, either version 3 of the License, or | ||||
| #    (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| import testenv_controller | ||||
| # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | ||||
| 
 | ||||
|  | @ -0,0 +1,66 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| import ast | ||||
| import base64 | ||||
| import csv | ||||
| import glob | ||||
| import itertools | ||||
| import logging | ||||
| import operator | ||||
| import datetime | ||||
| import hashlib | ||||
| import os | ||||
| import re | ||||
| import simplejson | ||||
| import time | ||||
| import urllib | ||||
| import urllib2 | ||||
| import urlparse | ||||
| import xmlrpclib | ||||
| import zlib | ||||
| from xml.etree import ElementTree | ||||
| from cStringIO import StringIO | ||||
| 
 | ||||
| import babel.messages.pofile | ||||
| import werkzeug.utils | ||||
| import werkzeug.wrappers | ||||
| try: | ||||
|     import xlwt | ||||
| except ImportError: | ||||
|     xlwt = None | ||||
| 
 | ||||
| import openerp | ||||
| import openerp.modules.registry | ||||
| from openerp.tools.translate import _ | ||||
| from openerp.tools import config | ||||
| 
 | ||||
| from openerp.addons.web import http | ||||
| 
 | ||||
| 
 | ||||
| class WebClient(http.Controller): | ||||
|     _cp_path = "/web/testenv" | ||||
| 
 | ||||
|     @http.jsonrequest | ||||
|     def testmode(self, req, db=False):             | ||||
|         if not db and req and req.session: | ||||
|             db = req.session._db | ||||
|              | ||||
|         if db: | ||||
|             h = req.httprequest.environ['HTTP_HOST'].split(':')[0] | ||||
|             d = h.split('.')[0]     | ||||
|             r = openerp.tools.config.get('dbfilter_test', 'test*').replace('%h', h).replace('%d', d) | ||||
|             try: | ||||
|                 pattern_list = eval(r) | ||||
|                 if not hasattr(pattern_list, '__iter__'): | ||||
|                     pattern_list = [pattern_list] | ||||
|             except: | ||||
|                 pattern_list = [r] | ||||
|              | ||||
|             for pattern in pattern_list: | ||||
|                 if  isinstance(pattern, str) and re.match(pattern, db): | ||||
|                     return True | ||||
|         return False | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: | ||||
| After Width: | Height: | Size: 2.8 KiB | 
|  | @ -0,0 +1,10 @@ | |||
| 
 | ||||
| .test-mode-activated { | ||||
|   background-size: cover; | ||||
|   background-attachment: fixed;   | ||||
| } | ||||
| 
 | ||||
| .test-mode-activated > * { | ||||
|   opacity: 0.9; | ||||
|   background-color: rgba(0,0,0,0);   | ||||
| } | ||||
| After Width: | Height: | Size: 22 KiB | 
|  | @ -0,0 +1,32 @@ | |||
| openerp.cam_testenv = function (openerp) { | ||||
| 	 | ||||
| 	openerp.web.WebClient = openerp.web.WebClient.extend({ | ||||
|     	/** | ||||
|     	 * Test env | ||||
|     	 */ | ||||
| 	    start: function() { | ||||
| 	        var self = this; | ||||
| 	         | ||||
| 	        return $.when(this._super()).then(function() { | ||||
| 		        //this._super();
 | ||||
| 		         | ||||
| 		        db = null | ||||
| 		        if (jQuery.param !== undefined && jQuery.deparam(jQuery.param.querystring()).db !== undefined) { | ||||
| 		        	db = jQuery.deparam(jQuery.param.querystring()).db | ||||
| 		        } | ||||
| 		         | ||||
| 		        self.rpc("/web/testenv/testmode", {'db': db}).done(function(result) { | ||||
| 		            // If immediately follows a login (triggered by trying to restore
 | ||||
| 		            // an invalid session or no session at all), refresh session data
 | ||||
| 		            // (should not change, but just in case...)
 | ||||
| 		           if (result) { | ||||
| 		        	   $("body").addClass("test-mode-activated"); | ||||
| 		               $("body").css("background-image", "url(" + openerp.session.origin + "/cam_testenv/static/src/img/back-testenv.jpg" + ")"); | ||||
| 		           } | ||||
| 		        }); | ||||
| 	        }); | ||||
| 	    }		 | ||||
| 		 | ||||
| 	}); | ||||
| 	 | ||||
| } | ||||
|  | @ -0,0 +1,25 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution | ||||
| #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU Affero General Public License as | ||||
| #    published by the Free Software Foundation, either version 3 of the | ||||
| #    License, or (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU Affero General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU Affero General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| import cam_work_order | ||||
| 
 | ||||
| # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | ||||
| 
 | ||||
|  | @ -0,0 +1,40 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution | ||||
| #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU Affero General Public License as | ||||
| #    published by the Free Software Foundation, either version 3 of the | ||||
| #    License, or (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU Affero General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU Affero General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| 
 | ||||
| { | ||||
|     'name': 'Camadeus Produktionsschein', | ||||
|     'category': 'Custom',  | ||||
|     'version': '1.0', | ||||
|     'description': """Produktionsschein für die Arbeitsausführung""", | ||||
|     'author': 'camadeus GmbH', | ||||
|     'website': 'http://www.camadeus.at', | ||||
|     'depends': ['sale'], | ||||
|     'data': [          | ||||
|         'cam_work_order_view.xml', | ||||
|         'cam_work_order_data.xml', | ||||
|         'security/ir.model.access.csv', | ||||
|     ], | ||||
|     'installable': True, | ||||
|     'auto_install': False, | ||||
| } | ||||
| 
 | ||||
| # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | ||||
|  | @ -0,0 +1,163 @@ | |||
| # -*- encoding: utf-8 -*- | ||||
| ############################################################################## | ||||
| # | ||||
| #    OpenERP, Open Source Management Solution     | ||||
| #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved | ||||
| #    $Id$ | ||||
| # | ||||
| #    This program is free software: you can redistribute it and/or modify | ||||
| #    it under the terms of the GNU General Public License as published by | ||||
| #    the Free Software Foundation, either version 3 of the License, or | ||||
| #    (at your option) any later version. | ||||
| # | ||||
| #    This program is distributed in the hope that it will be useful, | ||||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| #    GNU General Public License for more details. | ||||
| # | ||||
| #    You should have received a copy of the GNU General Public License | ||||
| #    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ############################################################################## | ||||
| 
 | ||||
| from openerp.osv import fields, osv | ||||
| from openerp import api | ||||
| from openerp.tools.translate import _ | ||||
| from openerp import SUPERUSER_ID | ||||
| from openerp import tools | ||||
| from lxml import etree | ||||
|                    | ||||
| class sale_order(osv.osv): | ||||
|     _inherit = 'sale.order' | ||||
|      | ||||
|     _columns = { | ||||
|         'work_order_ids': fields.one2many('work.order','sale_id','Produktionsscheine'), | ||||
|     } | ||||
|      | ||||
|     def action_view_work_order(self, cr, uid, ids, context=None): | ||||
|          | ||||
|         mod_obj = self.pool.get('ir.model.data') | ||||
|         act_obj = self.pool.get('ir.actions.act_window') | ||||
| 
 | ||||
|         result = mod_obj.get_object_reference(cr, uid, 'cam_work_order', 'work_order_action') | ||||
|         id = result and result[1] or False | ||||
|         result = act_obj.read(cr, uid, [id], context=context)[0] | ||||
| 
 | ||||
|         #compute the number of work orders to display | ||||
|         work_ids = [] | ||||
|         for so in self.browse(cr, uid, ids, context=context): | ||||
|             work_ids += [order.id for order in so.work_order_ids] | ||||
|              | ||||
|         #choose the view_mode accordingly | ||||
|         if len(work_ids) > 1: | ||||
|             result['domain'] = "[('id','in',[" + ','.join(map(str, work_ids)) + "])]" | ||||
|         else: | ||||
|             res = mod_obj.get_object_reference(cr, uid, 'cam_custom', 'work_order_form') | ||||
|             result['views'] = [(res and res[1] or False, 'form')] | ||||
|             result['res_id'] = work_ids and work_ids[0] or False | ||||
|         return result     | ||||
|      | ||||
|     def button_work_order(self, cr, uid, ids, context=None): | ||||
|         assert len(ids) == 1 #'This option should only be used for a single id at a time.' | ||||
|         order = self.browse(cr, uid, ids[0], context=context) | ||||
|          | ||||
|         existing_ids = self.pool.get('work.order').search(cr, uid, [('sale_id','=',order.id)]) | ||||
|         if existing_ids: | ||||
|             work_id = existing_ids[0] | ||||
|         else:         | ||||
|             lines = [] | ||||
|             for l in order.order_line: | ||||
|                 line = { | ||||
|                     'name': l.name, | ||||
|                     'qty': l.product_uom_qty, | ||||
|                 } | ||||
|                 lines.append((0,0,line)) | ||||
|                  | ||||
|             vals = { | ||||
|                 'partner_id': order.partner_id.id, | ||||
|                 'sale_id': order.id, | ||||
|                 'line_ids': lines, | ||||
|             }  | ||||
|             work_id = self.pool.get('work.order').create(cr, uid, vals, context=context) | ||||
|         return { | ||||
|             'type': 'ir.actions.act_window', | ||||
|             'name': _('Produktionsschein'), | ||||
|             'res_model': 'work.order', | ||||
|             'res_id': work_id, | ||||
|             'view_type': 'form', | ||||
|             'view_mode': 'form', | ||||
|             'target': 'current', | ||||
|             'nodestroy': True, | ||||
|         } | ||||
| 
 | ||||
| class work_order_line(osv.Model): | ||||
|     _name = 'work.order.line' | ||||
|     _description = 'Arbeitsposition' | ||||
|     _order = 'seq, id' | ||||
|     _columns = { | ||||
|         'seq': fields.integer('Sequenz'), | ||||
|         'name': fields.text('Bezeichnung', size=30, required=True), | ||||
|         'qty': fields.float('Stück'), | ||||
|         'order_id': fields.many2one('work.order', required=True, ondelete='cascade'), | ||||
|     } | ||||
|      | ||||
| class work_order_stage(osv.osv): | ||||
|     _name = "work.order.stage" | ||||
|     _description = "Stage of work order" | ||||
|     _order = "sequence, id" | ||||
| 
 | ||||
|     _columns = { | ||||
|         'name': fields.char('Stage Name', required=True, translate=True), | ||||
|         'sequence': fields.integer('Sequence', help="Used to order stages. Lower is better."), | ||||
|         'fold': fields.boolean('Folded in Kanban View', help='This stage is folded in the kanban view when there are no records in that stage to display.'), | ||||
|     } | ||||
| 
 | ||||
|     _defaults = { | ||||
|         'sequence': 1, | ||||
|         'fold': False, | ||||
|     } | ||||
|      | ||||
| class work_order(osv.Model): | ||||
|     _name = 'work.order' | ||||
|     _description = 'Produktionsschein' | ||||
|     _inherit = ['mail.thread'] | ||||
|      | ||||
|     _columns = { | ||||
|         'name': fields.char('Bezeichnung', size=30, required=True), | ||||
|         'sale_id': fields.many2one('sale.order', 'Verkaufsauftrag', required=True), | ||||
|         'partner_id': fields.many2one('res.partner', 'Kunde', required=True), | ||||
|         'parter_id_street': fields.related('partner_id', 'street', type="char", relation="res.partner", string="Strasse", store=False), | ||||
|         'parter_id_zip': fields.related('partner_id', 'zip', type="char", relation="res.partner", string="Postleitzahl", store=False), | ||||
|         'parter_id_city': fields.related('partner_id', 'city', type="char", relation="res.partner", string="Stadt", store=False), | ||||
|         'user_id': fields.many2one('res.users', 'Bearbeiter'), | ||||
|         'stage_id': fields.many2one('work.order.stage', 'Status', track_visibility='onchange', select=True),         | ||||
|         'date_of_creation': fields.date('Erstellungsdatum'), | ||||
|         'line_ids': fields.one2many('work.order.line', 'order_id', 'Positionen', copy=True), | ||||
|         'work_date': fields.char('Produktionsstermin',size=120), | ||||
|         'work_address': fields.text('Produktionsadresse'), | ||||
|         'graphic_text': fields.text('Anmerkungen'), | ||||
|     } | ||||
|      | ||||
|     def _get_default_stage_id(self, cr, uid, context=None): | ||||
|         """ Gives default stage_id """ | ||||
|         return self.pool.get('work.order.stage').search(cr, uid, [], context=context)[0] | ||||
|      | ||||
|     _defaults = { | ||||
|         'name': '/', | ||||
|         'date_of_creation': fields.date.context_today, | ||||
|         'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c),  | ||||
|     } | ||||
|      | ||||
|     def create(self, cr, uid, vals, context=None): | ||||
|         if context is None: | ||||
|             context = {} | ||||
|         if vals.get('name', '/') == '/': | ||||
|             vals['name'] = self.pool.get('ir.sequence').get(cr, uid, 'work.order') or '/' | ||||
|         new_id = super(work_order, self).create(cr, uid, vals, context=context) | ||||
|         return new_id | ||||
|      | ||||
|     def print_quotation(self, cr, uid, ids, context=None): | ||||
|         ''' | ||||
|         This function prints the work order | ||||
|         ''' | ||||
|         return self.pool['report'].get_action(cr, uid, ids, 'cam_reports.report_workorder', context=context)  | ||||
|  | @ -0,0 +1,49 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <openerp> | ||||
| 	<data noupdate="1"> | ||||
|         <!-- Sequences for work.order --> | ||||
|         <record id="seq_type_work_order" model="ir.sequence.type"> | ||||
|             <field name="name">Work Order</field> | ||||
|             <field name="code">work.order</field> | ||||
|         </record> | ||||
| 
 | ||||
|         <record id="seq_work_order" model="ir.sequence"> | ||||
|             <field name="name">Work Order</field> | ||||
|             <field name="code">work.order</field> | ||||
|             <field name="prefix">PS-</field> | ||||
|             <field name="padding">5</field> | ||||
|             <field name="company_id" eval="False"/> | ||||
|         </record> | ||||
|          | ||||
|         <!-- Status values for work order--> | ||||
|         <record id="work_order_stage_1" model="work.order.stage"> | ||||
|             <field name="name">Neu</field> | ||||
|             <field name="sequence">1</field> | ||||
|             <field name="fold">False</field> | ||||
|         </record> | ||||
| 
 | ||||
|         <record id="work_order_stage_2" model="work.order.stage"> | ||||
|             <field name="name">In Bearbeitung</field> | ||||
|             <field name="sequence">2</field> | ||||
|             <field name="fold">False</field> | ||||
|         </record> | ||||
|          | ||||
|         <record id="work_order_stage_3" model="work.order.stage"> | ||||
|             <field name="name">Bereit für Produktion</field> | ||||
|             <field name="sequence">3</field> | ||||
|             <field name="fold">False</field> | ||||
|         </record> | ||||
|          | ||||
|         <record id="work_order_stage_4" model="work.order.stage"> | ||||
|             <field name="name">Terminisiert</field> | ||||
|             <field name="sequence">4</field> | ||||
|             <field name="fold">False</field> | ||||
|         </record> | ||||
|          | ||||
|         <record id="work_order_stage_5" model="work.order.stage"> | ||||
|             <field name="name">Erledigt</field> | ||||
|             <field name="sequence">5</field> | ||||
|             <field name="fold">False</field> | ||||
|         </record> | ||||
| 	</data> | ||||
| </openerp> | ||||
|  | @ -0,0 +1,211 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <openerp> | ||||
| 	<data> | ||||
|         	 | ||||
|        <!-- Form Arbeitschein-->	 | ||||
|        <record id="work_order_form" model="ir.ui.view"> | ||||
|             <field name="name">work_order_form</field> | ||||
|             <field name="model">work.order</field> | ||||
|             <field name="arch" type="xml"> | ||||
|                 <form string="Produktionsschein" version="7.0"> | ||||
|                  | ||||
|                 <header> | ||||
|                 	<button name="print_quotation" string="Drucken" type="object"/> | ||||
|                 	<field name="stage_id" widget="statusbar" clickable="True"/> | ||||
|                 </header> | ||||
|                 <sheet> | ||||
|                     <h1> | ||||
|                         <field name="name" class="oe_inline" attrs="{'invisible': [('name','=','/')]}" readonly="1"/> | ||||
|                     </h1> | ||||
|                     <group> | ||||
|                         <group> | ||||
|                             <field name="partner_id" context="{'show_address': 1}" options="{"always_reload": True, "highlight_first_line": True}"/>    | ||||
| 							<field name="user_id"/>                             | ||||
|                         </group> | ||||
|                         <group> | ||||
| 							<field name="date_of_creation"/> | ||||
|                         	<field name="work_date"/>                          | ||||
|                             <field name="work_address"/> | ||||
| 							<field name="sale_id"/>                            | ||||
|                         </group> | ||||
|                     </group> | ||||
|                     <group string="Anmerkungen" colspan="2"> | ||||
|                         <field name="graphic_text" nolabel="1"/> | ||||
|                     </group> | ||||
|                      | ||||
|                     <notebook> | ||||
|                         <page string="Positionen"> | ||||
|                             <field name="line_ids"> | ||||
|                                 <tree editable="top"> | ||||
|                                     <field name="seq" widget="handle"/> | ||||
|                                     <field name="name"/> | ||||
|                                     <field name="qty"/> | ||||
|                                 </tree> | ||||
|                             </field> | ||||
|                          | ||||
|                         </page> | ||||
|                     </notebook> | ||||
|                 </sheet> | ||||
|                 <div class="oe_chatter"> | ||||
|                     <field name="message_follower_ids" widget="mail_followers"/> | ||||
|                     <field name="message_ids" widget="mail_thread"/> | ||||
|                 </div> | ||||
|                 </form> | ||||
|             </field> | ||||
|         </record> | ||||
|          | ||||
|         <!-- Arbeitschein Kanban --> | ||||
|         <record id="work_order_kanban" model="ir.ui.view"> | ||||
|             <field name="name">work_order_kanban</field> | ||||
|             <field name="model">work.order</field> | ||||
|             <field name="type">kanban</field> | ||||
|             <field name="arch" type="xml"> | ||||
|                 <kanban default_group_by="stage_id"> | ||||
|                     <templates> | ||||
|                         <t t-name="kanban-box"> | ||||
|                             <div t-attf-class="oe_kanban_card oe_kanban_global_click"> | ||||
|                                 <div class="oe_dropdown_toggle oe_dropdown_kanban"> | ||||
|                                     <span class="oe_e">í</span> | ||||
|                                     <ul class="oe_dropdown_menu"> | ||||
|                                         <t t-if="widget.view.is_action_enabled('edit')"><li><a type="edit">Edit...</a></li></t> | ||||
|                                         <t t-if="widget.view.is_action_enabled('delete')"><li><a type="delete">Delete</a></li></t> | ||||
|                                     </ul> | ||||
|                                 </div> | ||||
|                                 <div class="oe_kanban_content"> | ||||
|                                     <div> | ||||
|                                         <b><field name="name"/></b> | ||||
|                                     </div> | ||||
|                                     <div> | ||||
|                                         <field name="partner_id"/><br/> | ||||
|                                          <field name="parter_id_street"/><br/> | ||||
| 										 <field name="parter_id_zip"/> <field name="parter_id_city"/>                                        | ||||
|                                     </div>  | ||||
|                                     <div> | ||||
|                                         <i><field name="work_date"/></i> | ||||
|                                     </div> | ||||
|                                 </div> | ||||
|                                 <div class="oe_clear"></div> | ||||
|                             </div> | ||||
|                         </t> | ||||
|                     </templates> | ||||
|                 </kanban> | ||||
|             </field> | ||||
|         </record>    | ||||
|         | ||||
|        <!-- Arbeitschein Search -->   | ||||
|        <record id="work_order_search" model="ir.ui.view"> | ||||
|             <field name="name">work_order_search</field> | ||||
|             <field name="model">work.order</field> | ||||
|             <field name="arch" type="xml"> | ||||
|                 <search string="Produktionsschein"> | ||||
|                     <field name="name"/> | ||||
|                     <field name="partner_id"/> | ||||
|                     <field name="user_id"/> | ||||
|                     <separator/> | ||||
|                     <group expand="0" string="Group By"> | ||||
|                         <filter string="Kunden" domain="[]" context="{'group_by':'partner_id'}"/> | ||||
|                         <filter string="Bearbeiter" domain="[]" context="{'group_by':'user_id'}"/> | ||||
| 						<filter string="Status" domain="[]" context="{'group_by':'stage_id'}"/>                         | ||||
|                     </group> | ||||
|              </search> | ||||
|             </field> | ||||
|         </record> | ||||
|          | ||||
|        <!-- Arbeitschein Tree -->   | ||||
|        <record id="work_order_tree" model="ir.ui.view"> | ||||
|             <field name="name">work_order_tree</field> | ||||
|             <field name="model">work.order</field> | ||||
|             <field name="arch" type="xml"> | ||||
|                 <tree string="Produktionsschein"> | ||||
|                         <field name="name"/> | ||||
|                         <field name="partner_id"/> | ||||
|                         <field name="sale_id"/> | ||||
|                         <field name="user_id"/> | ||||
|                         <field name="stage_id"/> | ||||
|                </tree> | ||||
|             </field> | ||||
|         </record> | ||||
|         | ||||
|        <!-- Action Arbeitsschein --> | ||||
|        <record id="work_order_action" model="ir.actions.act_window"> | ||||
|             <field name="name">Produktionsscheine</field> | ||||
|             <field name="type">ir.actions.act_window</field> | ||||
|             <field name="res_model">work.order</field> | ||||
|             <field name="view_type">form</field> | ||||
| 			<field name="view_mode">kanban,tree,form</field> | ||||
| 			<field name="help" type="html">            	 | ||||
|               <p class="oe_view_nocontent_create"> | ||||
|                 Hier klicken um einen neuen Produktionsschein zu erstellen. | ||||
|               </p><p> | ||||
|                 Verwaltung von Produktionsscheinen. | ||||
|               </p> | ||||
|             </field>             | ||||
|         </record> | ||||
|          | ||||
|        <!-- Form Arbeitschein Status -->	 | ||||
|        <record id="work_order_stages_form" model="ir.ui.view"> | ||||
|             <field name="name">work_order_stages_form</field> | ||||
|             <field name="model">work.order.stage</field> | ||||
|             <field name="arch" type="xml"> | ||||
|                 <form string="Status" version="7.0"> | ||||
| 	                <header/> | ||||
| 	                <sheet> | ||||
| 	                    <h1> | ||||
| 	                        <field name="name" class="oe_inline"/> | ||||
| 	                    </h1> | ||||
| 	                    <group> | ||||
| 	                        <group> | ||||
| 								<field name="sequence"/>                             | ||||
| 	                        </group> | ||||
| 	                        <group> | ||||
| 								<field name="fold"/> | ||||
| 	                        </group> | ||||
| 	                    </group> | ||||
| 	                </sheet> | ||||
|                 </form> | ||||
|             </field> | ||||
|         </record>         | ||||
|          | ||||
|         <!-- Action Arbeitsschein Status --> | ||||
|        <record id="work_order_stages_action" model="ir.actions.act_window"> | ||||
|             <field name="name">Status</field> | ||||
|             <field name="type">ir.actions.act_window</field> | ||||
|             <field name="res_model">work.order.stage</field> | ||||
|             <field name="view_type">form</field> | ||||
| 			<field name="view_mode">tree,form</field> | ||||
| 			<field name="help" type="html">            	 | ||||
|               <p class="oe_view_nocontent_create"> | ||||
|                 Hier klicken um einen neuen Status für Produktionsschein zu erstellen. | ||||
|               </p><p> | ||||
|                 Verwaltung von Status von Produktionsscheinen. | ||||
|               </p> | ||||
|             </field>             | ||||
|         </record>         | ||||
|          | ||||
|         <!-- Menüeinträge --> | ||||
|         <menuitem id="work_order_main" name="Produktionsscheine" sequence="21"/> | ||||
|         <menuitem id="work_order_sub" parent="work_order_main" name="Produktionsscheine" sequence="10"/> | ||||
| 		<menuitem id="work_config" parent="work_order_main" name="Konfiguration" sequence="50"/>         | ||||
|          | ||||
|         <menuitem action="work_order_action" id="work_order_menu" parent="work_order_sub" sequence="10"/> | ||||
| 		<menuitem action="work_order_stages_action" id="work_stages_menu" parent="work_config" sequence="10"/>         | ||||
|          | ||||
|         <!--  Adaption for Sale order --> | ||||
|         <record id="view_order_work_form" model="ir.ui.view"> | ||||
|             <field name="name">view_order_work_form</field> | ||||
|             <field name="model">sale.order</field> | ||||
|             <field name="inherit_id" ref="sale.view_order_form"/> | ||||
|             <field name="arch" type="xml">  | ||||
|                 <button string="Create Invoice" position="after"> | ||||
|                     <field name="work_order_ids" invisible="1"/> | ||||
|                     <button name="action_view_work_order" string="Zeige Produktionsschein" type="object" class="oe_highlight" | ||||
|                             attrs="{'invisible': ['|',('work_order_ids','=',False),('work_order_ids','=',[])]}" groups="base.group_user"/> | ||||
|                     <button name="button_work_order" string="Erzeuge Produktionsschein" type="object" class="oe_highlight"  | ||||
|                     		attrs="{'invisible': ['|',('state','not in',['manual','progress']),('work_order_ids','!=',[])]}"/>  | ||||
|                 </button> | ||||
|             </field>                 | ||||
|             <field name="priority">17</field>              | ||||
|         </record>         	 | ||||
|         	 | ||||
| 	</data> | ||||
| </openerp> | ||||
|  | @ -0,0 +1,5 @@ | |||
| id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink | ||||
| modify_work_order,modify_order_sale_user,model_work_order,base.group_sale_salesman,1,1,1,1 | ||||
| modify_work_order_line,modify_order_line_sale_user,model_work_order_line,base.group_sale_salesman,1,1,1,1 | ||||
| access_work_category,work_category_user,model_work_category,base.group_sale_salesman,1,0,0,0 | ||||
| modify_work_category,work_category_manager,model_work_category,base.group_sale_manager,1,1,1,1 | ||||
| 
 | 
| After Width: | Height: | Size: 2.8 KiB | 
|  | @ -0,0 +1,15 @@ | |||
| Stop Phoning Home Feature from OpenERP | ||||
| ====================================== | ||||
| 
 | ||||
| Note: | ||||
| ----- | ||||
| 
 | ||||
| * For V8 checkout master branch | ||||
| * for V7 checkout 7.0 branch | ||||
| 
 | ||||
| Remove Few Phoning home feature effect from Core OpenERP. | ||||
| --------------------------------------------------------- | ||||
| 
 | ||||
| * Stop Scheduler for Sending Company/Database information to Odoo/OpenERP company. | ||||
| * Remove ``Your OpenERP is not supported.``. | ||||
| * Change sequence of the ``Apps`` and ``Update`` menu and arrange ``Installed Modules`` at first position. | ||||
|  | @ -0,0 +1 @@ | |||
| import mail | ||||
|  | @ -0,0 +1,29 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| { | ||||
|     'name': 'Stop Phoning Home', | ||||
|     'version': '1.0', | ||||
|     'category': '', | ||||
|     "sequence": 14, | ||||
|     'complexity': "easy", | ||||
|     'category': 'Hidden', | ||||
|     'description': """ | ||||
|         Remove Few Phoning home feature effect from Core OpenERP. | ||||
|     """, | ||||
|     'author': 'Ruchir Shukla', | ||||
|     'website': 'www.bizzappdev.com', | ||||
|     'depends': ["mail",'web'], | ||||
|     'init_xml': [], | ||||
|     'data': [ | ||||
|         "base_view.xml", | ||||
|         "mail_data.xml", | ||||
|     ], | ||||
|     'demo_xml': [], | ||||
|     'test': [ | ||||
|     ], | ||||
|     'qweb' : [ | ||||
|         "static/src/xml/base.xml", | ||||
|     ], | ||||
|     'installable': True, | ||||
|     'auto_install': True, | ||||
| } | ||||
| # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | ||||
|  | @ -0,0 +1,7 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <openerp> | ||||
|     <data> | ||||
|         <menuitem id="base.menu_module_tree" parent="base.menu_management" name="Installed Modules" sequence="10" action="base.open_module_tree" /> | ||||
|         <menuitem id="base.module_mi" parent="base.menu_management" sequence="100" action="base.modules_act_cl"/> | ||||
|     </data> | ||||
| </openerp> | ||||
|  | @ -0,0 +1,25 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| from openerp.osv import osv | ||||
| import logging | ||||
| 
 | ||||
| _logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| from openerp.tools import config | ||||
| 
 | ||||
| config['publisher_warranty_url'] = '' | ||||
| 
 | ||||
| 
 | ||||
| class publisher_warranty_contract(osv.osv): | ||||
|     _inherit = 'publisher_warranty.contract' | ||||
| 
 | ||||
|     def update_notification(self, cr, uid, ids, cron_mode=True, | ||||
|                             context=None): | ||||
| 
 | ||||
|         _logger.info("NO More Spying Stuff") | ||||
| 
 | ||||
|         return True | ||||
| 
 | ||||
| 
 | ||||
| publisher_warranty_contract() | ||||
| 
 | ||||
|  | @ -0,0 +1,26 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <openerp> | ||||
|     <data> | ||||
| 
 | ||||
| 
 | ||||
|         <record id="mail.ir_cron_module_update_notification" model="ir.cron"> | ||||
|             <field name="name">Update Notification</field> | ||||
|             <field eval="False" name="active" /> | ||||
|             <field name="user_id" ref="base.user_root" /> | ||||
|             <field name="interval_number">1</field> | ||||
|             <field name="interval_type">weeks</field> | ||||
|             <field name="numbercall">-1</field> | ||||
|             <field eval="False" name="doall" /> | ||||
|             <field eval="'publisher_warranty.contract'" name="model" /> | ||||
|             <field eval="'update_notification'" name="function" /> | ||||
|             <field eval="'(None,)'" name="args" /> | ||||
|             <field name="priority">1000</field> | ||||
|         </record> | ||||
|          | ||||
|         <template id="assets_backend" name="oerp_no_phoning_home assets" inherit_id="web.assets_backend"> | ||||
|             <xpath expr="." position="inside"> | ||||
|                 <script type="text/javascript" src="/oerp_no_phoning_home/static/src/js/announcement.js"></script> | ||||
|             </xpath> | ||||
|         </template> | ||||
|     </data> | ||||
| </openerp> | ||||
| After Width: | Height: | Size: 11 KiB | 
|  | @ -0,0 +1,13 @@ | |||
| openerp.oerp_no_phoning_home = function(instance) { | ||||
|      instance.web.WebClient.include({ | ||||
|         show_application: function() { | ||||
|             return $.when(this._super.apply(this, arguments)); | ||||
|         }, | ||||
|         _ab_location: function(dbuuid) { | ||||
|            // return _.str.sprintf('https://services.openerp.com/openerp-enterprise/ab/css/%s.css', dbuuid);
 | ||||
|         }, | ||||
|         show_annoucement_bar: function() { | ||||
|             return; | ||||
|         } | ||||
|     }); | ||||
| }; | ||||
|  | @ -0,0 +1,17 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <templates id="template" xml:space="preserve"> | ||||
|     <t t-extend="UserMenu" > | ||||
|         <t t-jquery="ul.dropdown-menu" t-operation="replace"> | ||||
|             <ul class="dropdown-menu"> | ||||
|                 <li><a href="#" data-menu="settings">Preferences</a></li> | ||||
|                 <li><a href="#" data-menu="about">About OpenERP</a></li> | ||||
|                 <li><a href="#" data-menu="help">Help</a></li> | ||||
|                 <li><a href="#" data-menu="logout">Log out</a></li> | ||||
|             </ul> | ||||
|         </t> | ||||
|     </t> | ||||
|     <t t-extend="WebClient.announcement_bar" > | ||||
|         <t t-jquery="table.oe_webclient" t-operation="replace"> | ||||
|         </t> | ||||
|     </t> | ||||
| </templates> | ||||
|  | @ -0,0 +1,33 @@ | |||
| #!/bin/sh | ||||
| #dump the OpenERP DB (postgreSQL) | ||||
| #author: Camadeus GmbH | ||||
| 
 | ||||
| hostname=`/bin/hostname` | ||||
| 
 | ||||
| 
 | ||||
| dbnames=`psql -d postgres -c "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres'" --tuples-only` | ||||
| 
 | ||||
| # Dump DBs | ||||
| for db in $dbnames | ||||
| do | ||||
|  echo "creating backup for db: " $db | ||||
|  date=`date +"%Y%m%d_%H%M%N"` | ||||
|  filename="/var/pgdump/${hostname}_${db}_${date}.sql" | ||||
|  pg_dump -E UTF-8 -F p -b -f $filename $db | ||||
|  chmod 600 $filename | ||||
|  gzip $filename  | ||||
| done | ||||
| 
 | ||||
| 
 | ||||
| ########################################## | ||||
| ## Housekeeping | ||||
| ########################################## | ||||
| for file in `find /var/pgdump/ -mtime +30 -type f -name '*.sql.gz'` | ||||
| do | ||||
|  echo "deleting: " $file | ||||
|  rm $file | ||||
| done | ||||
| 
 | ||||
| 
 | ||||
| exit 0 | ||||
| 
 | ||||
|  | @ -0,0 +1,5 @@ | |||
| #!/usr/bin/env python | ||||
| from lib import cli | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     cli.main() | ||||
|  | @ -0,0 +1,150 @@ | |||
| #!/bin/bash | ||||
| ################################################################################ | ||||
| # Script for Installation: ODOO Saas4/Trunk server on Ubuntu 14.04 LTS | ||||
| # Author: André Schenkels, ICTSTUDIO 2014 | ||||
| #------------------------------------------------------------------------------- | ||||
| #   | ||||
| # This script will install ODOO Server on | ||||
| # clean Ubuntu 14.04 Server | ||||
| #------------------------------------------------------------------------------- | ||||
| # USAGE: | ||||
| # | ||||
| # odoo-install | ||||
| # | ||||
| # EXAMPLE: | ||||
| # ./odoo-install  | ||||
| # | ||||
| ################################################################################ | ||||
|   | ||||
| ##fixed parameters | ||||
| OE_USER="odoo" | ||||
| OE_HOME="/opt/$OE_USER" | ||||
| OE_HOME_EXT="/opt/$OE_USER/$OE_USER-server" | ||||
| 
 | ||||
| #Enter version for checkout "7.0" for version 7.0, "saas-4, saas-5 (opendays version) and "master" for trunk | ||||
| OE_VERSION="7.0" | ||||
| 
 | ||||
| #set the superadmin password | ||||
| OE_SUPERADMIN="c76EVdqj" | ||||
| OE_CONFIG="$OE_USER-server" | ||||
| 
 | ||||
| #-------------------------------------------------- | ||||
| # Set Locale en_US.UTF-8 | ||||
| #-------------------------------------------------- | ||||
| #echo -e "\n---- Set en_US.UTF-8 Locale ----" | ||||
| #sudo cp /etc/default/locale /etc/default/locale.BACKUP | ||||
| #sudo rm -rf /etc/default/locale | ||||
| #echo -e "* Change server config file" | ||||
| #sudo su root -c "echo 'LC_ALL="en_US.UTF-8"' >> /etc/default/locale" | ||||
| #sudo su root -c "echo 'LANG="en_US.UTF-8"' >> /etc/default/locale" | ||||
| #sudo su root -c "echo 'LANGUAGE="en_US:en"' >> /etc/default/locale" | ||||
| 
 | ||||
| #-------------------------------------------------- | ||||
| # Update Server | ||||
| #-------------------------------------------------- | ||||
| echo -e "\n---- Update Server ----" | ||||
| sudo apt-get upgrade -y | ||||
| sudo apt-get update | ||||
| 
 | ||||
| #-------------------------------------------------- | ||||
| # Install PostgreSQL Server | ||||
| #-------------------------------------------------- | ||||
| echo -e "\n---- Install PostgreSQL Server ----" | ||||
| sudo apt-get install postgresql -y   | ||||
| 
 | ||||
| #echo -e "\n---- PostgreSQL $PG_VERSION Settings  ----" | ||||
| #sudo sed -i s/"#listen_addresses = 'localhost'"/"listen_addresses = '*'"/g /etc/postgresql/9.3/main/postgresql.conf | ||||
| 
 | ||||
| echo -e "\n---- Creating the ODOO PostgreSQL User  ----" | ||||
| sudo su - postgres -c "createuser -s $OE_USER" 2> /dev/null || true | ||||
| 
 | ||||
| #-------------------------------------------------- | ||||
| # Install Dependencies | ||||
| #-------------------------------------------------- | ||||
| echo -e "\n---- Install tool packages ----" | ||||
| sudo apt-get install wget git bzr python-pip -y | ||||
| 
 | ||||
| echo -e "\n---- Install python packages ----" | ||||
| sudo apt-get install python-gevent python-dateutil python-feedparser python-ldap python-libxslt1 python-lxml python-mako python-openid python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-reportlab python-simplejson python-tz python-vatnumber python-vobject python-webdav python-werkzeug python-xlwt python-yaml python-zsi python-docutils python-psutil python-mock python-unittest2 python-jinja2 python-pypdf python-pdftools python-setuptools python-pybabel python-imaging python-matplotlib python-reportlab-accel python-openssl python-egenix-mxdatetime python-paramiko antiword python-decorator poppler-utils python-requests python-passlib -y | ||||
| 
 | ||||
| sudo pip install gevent gevent_psycopg2 psycogreen passlib | ||||
| 	 | ||||
| echo -e "\n---- Install latest gdata-python-client ----" | ||||
| cd /tmp | ||||
| wget http://gdata-python-client.googlecode.com/files/gdata-2.0.18.tar.gz | ||||
| tar zxvf gdata-2.0.18.tar.gz | ||||
| cd gdata-2.0.18/ | ||||
| sudo python setup.py install | ||||
| 
 | ||||
| 
 | ||||
| echo -e "\n---- Install Wkhtmltopdf 0.12.1 ----" | ||||
| sudo wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.1/wkhtmltox-0.12.1_linux-trusty-amd64.deb | ||||
| sudo dpkg -i wkhtmltox-*.deb | ||||
| sudo cp /usr/local/bin/wkhtmltopdf /usr/bin | ||||
| sudo cp /usr/local/bin/wkhtmltoimage /usr/bin | ||||
| 	 | ||||
| echo -e "\n---- Create ODOO system user ----" | ||||
| sudo adduser --system --quiet --shell=/bin/bash --home=$OE_HOME --gecos 'ODOO' --group $OE_USER | ||||
| sudo adduser $OE_USER sudo | ||||
| sudo cp /root/.profile $OE_HOME | ||||
| sudo chown $OE_USER:$OE_USER $OE_HOME/.profile | ||||
| sudo cp /root/.bashrc $OE_HOME | ||||
| sudo chown $OE_USER:$OE_USER $OE_HOME/.bashrc | ||||
| 
 | ||||
| echo -e "\n---- Create Log directory ----" | ||||
| sudo mkdir /var/log/$OE_USER | ||||
| sudo chown $OE_USER:$OE_USER /var/log/$OE_USER | ||||
| sudo chmod 700 /var/log/$OE_USER | ||||
| 
 | ||||
| echo -e "\n---- Set Logrotate config ----" | ||||
| sudo ln -s /opt/odoo/ext/config/logrotate /etc/logrotate.d/odoo | ||||
| 
 | ||||
| #-------------------------------------------------- | ||||
| # Install ODOO | ||||
| #-------------------------------------------------- | ||||
| 
 | ||||
| echo -e "\n---- Setting permissions on home folder ----" | ||||
| sudo chown -R $OE_USER:$OE_USER $OE_HOME/* | ||||
| 
 | ||||
| echo -e "Odoo Init File" | ||||
| sudo ln -s /opt/odoo/exit/config/odoo-server.init /etc/init.d/odoo-server | ||||
| 
 | ||||
| echo -e "\n---- Setup Git ----" | ||||
| sudo -u odoo mkdir /opt/odoo/odoo.git | ||||
| sudo -u odoo mkdir /opt/odoo/odoo | ||||
| sudo -u odoo mkdir /opt/odoo/ext.git | ||||
| sudo -u odoo mkdir /opt/odoo/ext | ||||
| cd /opt/odoo/odoo.git | ||||
| sudo -u odoo git init --bare | ||||
| cd /opt/odoo/ext.git | ||||
| sudo -u odoo git init --bare | ||||
| 
 | ||||
| sudo -u odoo touch /opt/odoo/odoo.git/hooks/post-receive | ||||
| sudo -u odoo echo -e '#!/bin/bash' >> /opt/odoo/odoo.git/hooks/post-receive | ||||
| sudo -u odoo echo -e 'git --work-tree=/opt/odoo/odoo --git-dir=/opt/odoo/odoo.git checkout -f' >> /opt/odoo/odoo.git/hooks/post-receive | ||||
| sudo -u odoo chmod +x /opt/odoo/odoo.git/hooks/post-receive | ||||
| 
 | ||||
| sudo -u odoo touch /opt/odoo/ext.git/hooks/post-receive | ||||
| sudo -u odoo echo -e '#!/bin/bash' >> /opt/odoo/ext.git/hooks/post-receive | ||||
| sudo -u odoo echo -e 'git --work-tree=/opt/odoo/ext --git-dir=/opt/odoo/ext.git checkout -f' >> /opt/odoo/ext.git/hooks/post-receive | ||||
| sudo -u odoo chmod +x /opt/odoo/ext.git/hooks/post-receive | ||||
| 
 | ||||
| echo "Done! The ODOO server can be started with /etc/init.d/$OE_CONFIG" | ||||
| echo "Please reboot the server now so that Wkhtmltopdf is working with your install." | ||||
| 
 | ||||
| echo "Done! Please specify a password for user '$OE_USER'" | ||||
| sudo passwd $OE_USER | ||||
| 
 | ||||
| ## | ||||
| ##  HERE git push of local is required | ||||
| ## | ||||
| ## Local commands: | ||||
| #git init  | ||||
| #git remote add odoo https://github.com/odoo/odoo.git | ||||
| #git pull odoo 8.0  | ||||
| #git remote add production odoo@134.119.17.66:/opt/odoo/odoo.git | ||||
| #git config --global push.default simple  # only push if on remote exists branch with same name | ||||
| #git push --set-upstream production master | ||||
| 
 | ||||
| echo -e "* Start ODOO on Startup" | ||||
| sudo update-rc.d $OE_CONFIG defaults | ||||
|  | @ -0,0 +1,34 @@ | |||
| #!/bin/bash | ||||
| ################################################################################ | ||||
| # Script for Installation: Nginx for Odoo v8.0 on Ubuntu 14.04 LTS | ||||
| # Author: Andreas Brückl | Camdeus Consulting | ||||
| #------------------------------------------------------------------------------- | ||||
| #   | ||||
| # This script will install nginx on | ||||
| # clean Ubuntu 14.04 Server | ||||
| #------------------------------------------------------------------------------- | ||||
| ################################################################################ | ||||
|   | ||||
| #--------------------------------------------- | ||||
| # Install | ||||
| #-------------------------------------------------- | ||||
| echo -e "\n---- Install nginx ----" | ||||
| sudo apt-get install nginx -y | ||||
| 
 | ||||
| #-------------------------------------------------- | ||||
| # Configure Nginx | ||||
| #-------------------------------------------------- | ||||
| sudo ln -s /opt/odoo/ext/config/odoo-80.nginx  /etc/nginx/sites-enabled/odoo-80 | ||||
| sudo rm /etc/nginx/sites-enabled/default | ||||
| sudo service nginx restart | ||||
| 
 | ||||
| #-------------------------------------------------- | ||||
| # Configure Nginx for SSL/HTTPS Port 443 | ||||
| #-------------------------------------------------- | ||||
| 
 | ||||
| #sudo touch /etc/nginx/sites-available/odoo-443 | ||||
| #sudo ln -s /etc/nginx/sites-available/odoo-443 /etc/nginx/sites-enabled | ||||
| #sudo mkdir /etc/nginx/ssl | ||||
| #sudo chmod 600 ssl | ||||
| 
 | ||||
| #sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.crt | ||||
|  | @ -0,0 +1,149 @@ | |||
| #!/bin/bash | ||||
| ################################################################################ | ||||
| # Script for Installation: ODOO Saas4/Trunk server on Ubuntu 14.04 LTS | ||||
| # Author: André Schenkels, ICTSTUDIO 2014 | ||||
| #------------------------------------------------------------------------------- | ||||
| #   | ||||
| # This script will install ODOO Server on | ||||
| # clean Ubuntu 14.04 Server | ||||
| #------------------------------------------------------------------------------- | ||||
| # USAGE: | ||||
| # | ||||
| # odoo-install | ||||
| # | ||||
| # EXAMPLE: | ||||
| # ./odoo-install  | ||||
| # | ||||
| ################################################################################ | ||||
|   | ||||
| ##fixed parameters | ||||
| OE_USER="odoo" | ||||
| OE_HOME="/opt/$OE_USER" | ||||
| OE_HOME_EXT="/opt/$OE_USER/$OE_USER-server" | ||||
| 
 | ||||
| #Enter version for checkout "7.0" for version 7.0, "saas-4, saas-5 (opendays version) and "master" for trunk | ||||
| OE_VERSION="8.0" | ||||
| 
 | ||||
| #set the superadmin password | ||||
| OE_SUPERADMIN="PzdX2fYj" | ||||
| OE_CONFIG="$OE_USER-server" | ||||
| 
 | ||||
| #-------------------------------------------------- | ||||
| # Set Locale en_US.UTF-8 | ||||
| #-------------------------------------------------- | ||||
| #echo -e "\n---- Set en_US.UTF-8 Locale ----" | ||||
| #sudo cp /etc/default/locale /etc/default/locale.BACKUP | ||||
| #sudo rm -rf /etc/default/locale | ||||
| #echo -e "* Change server config file" | ||||
| #sudo su root -c "echo 'LC_ALL="en_US.UTF-8"' >> /etc/default/locale" | ||||
| #sudo su root -c "echo 'LANG="en_US.UTF-8"' >> /etc/default/locale" | ||||
| #sudo su root -c "echo 'LANGUAGE="en_US:en"' >> /etc/default/locale" | ||||
| 
 | ||||
| #-------------------------------------------------- | ||||
| # Update Server | ||||
| #-------------------------------------------------- | ||||
| echo -e "\n---- Update Server ----" | ||||
| sudo apt-get upgrade -y | ||||
| sudo apt-get update | ||||
| 
 | ||||
| #-------------------------------------------------- | ||||
| # Install PostgreSQL Server | ||||
| #-------------------------------------------------- | ||||
| echo -e "\n---- Install PostgreSQL Server ----" | ||||
| sudo apt-get install postgresql -y   | ||||
| 
 | ||||
| #echo -e "\n---- PostgreSQL $PG_VERSION Settings  ----" | ||||
| #sudo sed -i s/"#listen_addresses = 'localhost'"/"listen_addresses = '*'"/g /etc/postgresql/9.3/main/postgresql.conf | ||||
| 
 | ||||
| echo -e "\n---- Creating the ODOO PostgreSQL User  ----" | ||||
| sudo su - postgres -c "createuser -s $OE_USER" 2> /dev/null || true | ||||
| 
 | ||||
| #-------------------------------------------------- | ||||
| # Install Dependencies | ||||
| #-------------------------------------------------- | ||||
| echo -e "\n---- Install tool packages ----" | ||||
| sudo apt-get install wget git bzr python-pip -y | ||||
| 
 | ||||
| echo -e "\n---- Install python packages ----" | ||||
| sudo apt-get install python-gevent python-dateutil python-feedparser python-ldap python-libxslt1 python-lxml python-mako python-openid python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-reportlab python-simplejson python-tz python-vatnumber python-vobject python-webdav python-werkzeug python-xlwt python-yaml python-zsi python-docutils python-psutil python-mock python-unittest2 python-jinja2 python-pypdf python-pdftools python-setuptools python-pybabel python-imaging python-matplotlib python-reportlab-accel python-openssl python-egenix-mxdatetime python-paramiko antiword python-decorator poppler-utils python-requests python-passlib -y | ||||
| 
 | ||||
| sudo pip install gevent gevent_psycopg2 psycogreen passlib psycogreen | ||||
| 	 | ||||
| echo -e "\n---- Install latest gdata-python-client ----" | ||||
| cd /tmp | ||||
| wget http://gdata-python-client.googlecode.com/files/gdata-2.0.18.tar.gz | ||||
| tar zxvf gdata-2.0.18.tar.gz | ||||
| cd gdata-2.0.18/ | ||||
| sudo python setup.py install | ||||
| 
 | ||||
| 
 | ||||
| echo -e "\n---- Install Wkhtmltopdf 0.12.1 ----" | ||||
| sudo wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.1/wkhtmltox-0.12.1_linux-wheezy-amd64.deb | ||||
| sudo dpkg -i wkhtmltox-0.12.1_linux-wheezy-amd64.deb | ||||
| sudo cp /usr/local/bin/wkhtmltopdf /usr/bin | ||||
| sudo cp /usr/local/bin/wkhtmltoimage /usr/bin | ||||
| 	 | ||||
| echo -e "\n---- Create ODOO system user ----" | ||||
| sudo adduser --system --quiet --shell /bin/bash --home $OE_HOME --gecos 'ODOO' --group $OE_USER | ||||
| sudo adduser $OE_USER sudo | ||||
| sudo cp /root/.profile $OE_HOME | ||||
| sudo chown $OE_USER:$OE_USER $OE_HOME/.profile | ||||
| sudo cp /root/.bashrc $OE_HOME | ||||
| sudo chown $OE_USER:$OE_USER $OE_HOME/.bashrc | ||||
| 
 | ||||
| echo -e "\n---- Create Log directory ----" | ||||
| sudo mkdir /var/log/$OE_USER | ||||
| sudo chown $OE_USER:$OE_USER /var/log/$OE_USER | ||||
| sudo chmod 700 /var/log/$OE_USER | ||||
| 
 | ||||
| echo -e "\n---- Set Logrotate config ----" | ||||
| sudo ln -s /opt/odoo/odoo/config/logrotate /etc/logrotate.d/odoo | ||||
| 
 | ||||
| #-------------------------------------------------- | ||||
| # Install ODOO | ||||
| #-------------------------------------------------- | ||||
| 
 | ||||
| echo -e "\n---- Setting permissions on home folder ----" | ||||
| sudo chown -R $OE_USER:$OE_USER $OE_HOME/* | ||||
| 
 | ||||
| echo -e "Odoo Init File" | ||||
| sudo ln -s /opt/odoo/ext/config/odoo-server.init /etc/init.d/odoo-server | ||||
| 
 | ||||
| echo -e "\n---- Setup Git ----" | ||||
| sudo -u odoo mkdir /opt/odoo/odoo.git | ||||
| sudo -u odoo mkdir /opt/odoo/odoo | ||||
| cd /opt/odoo/odoo.git | ||||
| sudo -u odoo git init --bare | ||||
| sudo -u odoo touch /opt/odoo/odoo.git/hooks/post-receive | ||||
| sudo -u odoo echo -e '#!/bin/bash' >> /opt/odoo/odoo.git/hooks/post-receive | ||||
| sudo -u odoo echo -e 'git --work-tree=/opt/odoo/odoo --git-dir=/opt/odoo/odoo.git checkout -f' >> /opt/odoo/odoo.git/hooks/post-receive | ||||
| sudo -u odoo chmod +x /opt/odoo/odoo.git/hooks/post-receive | ||||
| 
 | ||||
| sudo -u odoo mkdir /opt/odoo/ext.git | ||||
| sudo -u odoo mkdir /opt/odoo/ext | ||||
| cd /opt/odoo/ext.git | ||||
| sudo -u odoo git init --bare | ||||
| sudo -u odoo touch /opt/odoo/ext.git/hooks/post-receive | ||||
| sudo -u odoo echo -e '#!/bin/bash' >> /opt/odoo/ext.git/hooks/post-receive | ||||
| sudo -u odoo echo -e 'git --work-tree=/opt/odoo/ext --git-dir=/opt/odoo/ext.git checkout -f' >> /opt/odoo/ext.git/hooks/post-receive | ||||
| sudo -u odoo chmod +x /opt/odoo/ext.git/hooks/post-receive | ||||
| 
 | ||||
| echo "Done! The ODOO server can be started with /etc/init.d/$OE_CONFIG" | ||||
| echo "Please reboot the server now so that Wkhtmltopdf is working with your install." | ||||
| 
 | ||||
| echo "Done! Please specify a password for user '$OE_USER'" | ||||
| sudo passwd $OE_USER | ||||
| 
 | ||||
| ## | ||||
| ##  HERE git push of local is required | ||||
| ## | ||||
| ## Local commands: | ||||
| #git init  | ||||
| #git remote add odoo https://github.com/odoo/odoo.git | ||||
| #git pull odoo 8.0  | ||||
| #git remote add production odoo@134.119.17.66:/opt/odoo/odoo.git | ||||
| #git config --global push.default simple  # only push if on remote exists branch with same name | ||||
| #git push --set-upstream production master | ||||
| 
 | ||||
| echo -e "* Start ODOO on Startup" | ||||
| sudo update-rc.d $OE_CONFIG defaults | ||||
|  | @ -0,0 +1,28 @@ | |||
| 
 | ||||
| #!/bin/bash | ||||
| ################################################################################ | ||||
| # Script for Installation: tools for Odoo v8.0 installation | ||||
| # Author: Andreas Brückl | Camdeus Consulting | ||||
| #------------------------------------------------------------------------------- | ||||
| ################################################################################ | ||||
| 
 | ||||
| ##fixed parameters | ||||
| #openerp | ||||
| OE_USER="odoo" | ||||
| 
 | ||||
| # Execute with user "odoo" | ||||
| 
 | ||||
| #--------------------------------------------- | ||||
| # Setup daily backup | ||||
| #-------------------------------------------------- | ||||
| echo -e "\n---- Setup daily backup ----" | ||||
| sudo mkdir /var/pgdump | ||||
| sudo chown $OE_USER: /var/pgdump | ||||
| sudo chmod 700 /var/pgdump | ||||
| 
 | ||||
| # Install Cron job | ||||
| sudo -u $OE_USER crontab -l > /tmp/tmpcron | ||||
| echo "# Odoo backup daily at 1:30 a.m." >> /tmp/tmpcron | ||||
| echo "30 01 * * * /opt/odoo/ext/scripts/odoo-backup.sh" >> /tmp/tmpcron | ||||
| sudo -u $OE_USER crontab /tmp/tmpcron | ||||
| sudo rm /tmp/tmpcron | ||||
|  | @ -0,0 +1,4 @@ | |||
| import cli | ||||
| import config_at | ||||
| import environments | ||||
| import functions | ||||
|  | @ -0,0 +1,89 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| from functions import CamadeusFunctions | ||||
| from config_at import Config | ||||
| from environments import ENVIRONMENTS | ||||
| import sys, getopt | ||||
| 
 | ||||
| def main(): | ||||
|      | ||||
|     def _usage(): | ||||
|         print 'cam.py <environment> [create|setup|rollout|update] [<module_name>]' | ||||
|         sys.exit(3) | ||||
|      | ||||
|     argv = sys.argv[1:] | ||||
|     if not len(argv) == 2: | ||||
|         if len(argv) == 3 and argv[1] == 'update': # 'update' requires additional param 'module_name' | ||||
|             pass | ||||
|         else: | ||||
|             _usage() | ||||
|          | ||||
|     cmd = argv[1] | ||||
|     config = Config() | ||||
|      | ||||
|     env = ENVIRONMENTS.get(argv[0],False) | ||||
|     if not env: | ||||
|         _usage() | ||||
|      | ||||
|     instance = CamadeusFunctions(env, config) | ||||
| 
 | ||||
|     methods = False | ||||
|      | ||||
|     if cmd == 'test': | ||||
|         methods = [ | ||||
|             'login', | ||||
|         ] | ||||
|      | ||||
|     if cmd == 'create': | ||||
|         methods = [ | ||||
|             'create_db', | ||||
|             'login', | ||||
|             'install_module_sale', | ||||
|             'setup_accounting', | ||||
|             'setup_accounting2', | ||||
|             'set_admin_rights',             | ||||
|         ] | ||||
|      | ||||
|     if cmd == 'setup': | ||||
|         methods = [ | ||||
|             'login', | ||||
|             'uninstall_chat', | ||||
|             'install_modules', | ||||
|             'base_config', | ||||
|             'sale_config', | ||||
|             'set_date_format',  | ||||
|             'set_company',  | ||||
|             'set_taxes',     | ||||
|             'set_uom',     | ||||
|             'set_steuerzuordnung',                | ||||
|         ] | ||||
| 
 | ||||
|     if cmd == 'rollout': | ||||
|         methods = [ | ||||
|             'login', | ||||
|             'set_dokumentennummern',         | ||||
|         ]       | ||||
|      | ||||
|     if cmd == 'update': | ||||
|         instance.config.module_name = argv[2] | ||||
|         methods = [ | ||||
|             'login', | ||||
|             'update_module',         | ||||
|         ]  | ||||
|        | ||||
| 
 | ||||
|     if not methods: | ||||
|         _usage() | ||||
|          | ||||
|     print env | ||||
|                   | ||||
|     for method in methods:       | ||||
|         res = getattr(instance, method)() | ||||
|         print "%s: %s" % (res and "OK     " or "ERROR  ", getattr(instance, method).__doc__) | ||||
|         if not res: | ||||
|             return False | ||||
|      | ||||
|     print "\nAbgeschlossen." | ||||
|      | ||||
| if __name__ == "__main__": | ||||
|     main()     | ||||
|  | @ -0,0 +1,111 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| class Config():  | ||||
| 
 | ||||
|     def __init__(self): | ||||
|          | ||||
|         self.chart_of_accounts = 'l10n_at' | ||||
|         self.sales_tax = '20% MwSt' | ||||
|         self.purchase_tax = '20% VSt' | ||||
|         self.chart_template_id = 2 # Austrian Chart of Account | ||||
|          | ||||
|         self.company_data = { | ||||
|             'name': 'Camadeus GmbH', | ||||
|             'street': 'Kriehubergasse 16', | ||||
|             'street2': False, | ||||
|             'city': 'Wien', | ||||
|             'zip': '1050', | ||||
|             'phone': '+43 1 78910 96 70', | ||||
|             'fax': False, | ||||
|             'email': 'office@camadeus.at', | ||||
|             'website': 'http://www.camadeus.at', | ||||
|             'company_registry': '280076b ', | ||||
|             'country_id': 'at', # "de" für deutschland | ||||
|             'logo': False,        | ||||
|             'vat': 'ATU 62991855 ',      | ||||
|             'rml_header1': False, | ||||
|             'vat_check_vies': True, | ||||
|             'tax_calculation_rounding_method': 'round_globally', | ||||
|             #'rml_header' : './ext/addons/custom_reports/report/page.rml', # Report File | ||||
|             #'logo': './ext/addons/custom_reports/logo.png', | ||||
|         } | ||||
|          | ||||
|         self.valid_taxes = [ | ||||
|             '20% MwSt', | ||||
|             '10% MwSt', | ||||
|             '20% VSt', | ||||
|             '10% VSt', | ||||
|         ] | ||||
|          | ||||
|         # Aktive Steuerzuordnungen | ||||
|         self.valid_fiscal_positions = [ | ||||
|             #'Lieferant EU (ohne Ust-ID)', | ||||
|             #'Lieferant EU Unternehmen (mit USt-ID)', | ||||
|             #'Lieferant Ausland', | ||||
|             #'Kunde EU (ohne USt-ID)', | ||||
|             'Kunde Ausland', | ||||
|             'Kunde EU (ohne USt-ID)', | ||||
|             'Kunde EU Unternehmen (mit USt-ID)', | ||||
|         ]         | ||||
|          | ||||
|         # Allgemeine Einstellungen | ||||
|         self.base_config = { | ||||
|             'module_portal': False,      # Kundenportal | ||||
|         } | ||||
|          | ||||
|         # Einstellungen Verkauf | ||||
|         self.sale_config = { | ||||
|             'group_sale_delivery_address': True, # Verschiedene Adressen für Rechnung und Lieferung | ||||
|             'group_sale_pricelist': True, # Preislisten verwenden | ||||
|             'group_discount_per_so_line': True, # Rabatte verwenden | ||||
|             'group_uom': True, # Verwende Mengeneinheiten | ||||
|         } | ||||
|          | ||||
|         # Einstellungen Einkauf | ||||
|         self.purchase_config = { | ||||
|             'group_purchase_pricelist': True,      # Preislisten verwenden | ||||
|         } | ||||
|          | ||||
|         self.sequences = { | ||||
|             'sale.order':  {  | ||||
|                 'number_next_actual': 2000,  | ||||
|                 'prefix': 'A-', | ||||
|                 'padding': 5, | ||||
|             }, | ||||
| #             'picking.out':  {  | ||||
| #                 'number_next_actual': 2000,  | ||||
| #                 'prefix': 'L-', | ||||
| #                 'padding': 5, | ||||
| #             }, | ||||
| #             'purchase.order':  {  | ||||
| #                 'number_next_actual': 2000,  | ||||
| #                 'prefix': 'PO-', | ||||
| #                 'padding': 5, | ||||
| #             }, | ||||
| #             'account.invoice':  {  | ||||
| #                 'number_next_actual': 2000,  | ||||
| #                 'prefix': '14-', | ||||
| #                 'padding': 4, | ||||
| #             }, | ||||
|         } | ||||
|          | ||||
|         self.active_uoms = { | ||||
|             'product.product_uom_unit': 'Stk.', | ||||
|             #'product.product_uom_meter': 'lfm', | ||||
|             #'product.product_uom_litre': 'l', | ||||
|             #'product.product_uom_hour': 'h', | ||||
|         }         | ||||
|          | ||||
|         self.modules = [ | ||||
|             'document', | ||||
|             'auth_crypt', | ||||
|             'cam_testenv',             | ||||
|             #'cam_max_width', | ||||
|             #'oerp_no_phoning_home', | ||||
|             #'cam_custom', | ||||
|             #'custom_reports',                                                 | ||||
|             #'crm', | ||||
|             #'sale', | ||||
|             #'cam_hr_overtime', | ||||
|             #'cam_hr', | ||||
|         ] | ||||
|  | @ -0,0 +1,28 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| class Environment(): | ||||
|      | ||||
|     def __init__(self, host, port, dbname, username, pwd, admin_pw=False, basic_auth=False): | ||||
|         self.admin_pw = admin_pw | ||||
|         self.dbname = dbname | ||||
|         self.username = username | ||||
|         self.pwd = pwd | ||||
|         self.port = port | ||||
|         self.host = host | ||||
|         self.lang = 'de_DE' | ||||
|         self.basic_auth = basic_auth or ('user', 'pass') # HTTP authentification | ||||
|      | ||||
|     def __str__(self): | ||||
|         return """============================== | ||||
| Host:     %s | ||||
| User:     %s | ||||
| DB:       %s | ||||
| Port:     %s | ||||
| ==============================""" % (self.host, self.username, self.dbname, self.port) | ||||
|          | ||||
|      | ||||
| ENVIRONMENTS = { | ||||
|     'br': Environment('http://localhost', '8070', 'test13', 'admin', 'x', 'admin'),         | ||||
|     'br2': Environment('http://localhost', '8000', 'screenplane_1', 'admin', 'x', 'admin'),         | ||||
| } | ||||
|     | ||||
|  | @ -0,0 +1,321 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| import xmlrpclib | ||||
| import base64 | ||||
| import os | ||||
| import sys | ||||
| import datetime | ||||
| import json | ||||
| import requests | ||||
| from config_at import Config | ||||
| from environments import ENVIRONMENTS | ||||
| 
 | ||||
| class CamadeusFunctions(): | ||||
|      | ||||
|     def __init__(self, environment, config): | ||||
|         self.env = environment | ||||
|         self.config = config | ||||
| 
 | ||||
|     def create_db(self): | ||||
|         """Neue Datenbank erstellen""" | ||||
|          | ||||
|         payload = {'fields': [  {'name': 'super_admin_pwd', 'value': self.env.admin_pw}, | ||||
|                                 {'name': 'db_name', 'value': self.env.dbname}, | ||||
|                                 {'name': 'demo_data', 'value': False}, | ||||
|                                 {'name': 'db_lang', 'value': self.env.lang}, | ||||
|                                 {'name': 'create_admin_pwd', 'value': self.env.pwd}, | ||||
|                             ] | ||||
|                   } | ||||
|         payload = {'params': payload} | ||||
|         json_data = json.dumps(payload) | ||||
|         headers = {'content-type': 'application/json'} | ||||
|         r = requests.post('%s:%s/web/database/create' % (self.env.host,self.env.port), data=json_data, headers=headers, auth=self.env.basic_auth) | ||||
|         if r and r.json().get('result',False): | ||||
|             return True | ||||
|         else: | ||||
|             print "Error occured: %s" % r.json().get('error', '????') | ||||
|             return False         | ||||
| 
 | ||||
|     def login(self): | ||||
|         """Login""" | ||||
|          | ||||
|         # Get the uid | ||||
|         sock_common = xmlrpclib.ServerProxy ('%s:%s/xmlrpc/common' % (self.env.host,self.env.port)) | ||||
|         self.uid = sock_common.login(self.env.dbname, self.env.username, self.env.pwd) | ||||
|         if not self.uid: | ||||
|             raise "Authentication Error" | ||||
|         self.sock = xmlrpclib.ServerProxy('%s:%s/xmlrpc/object' % (self.env.host,self.env.port)) | ||||
|         return True | ||||
| 
 | ||||
|     def _execute(self, *args): | ||||
|         return self.sock.execute(self.env.dbname, self.uid, self.env.pwd, *args) | ||||
| 
 | ||||
|     def _readAndReturnFile(self, filename, encode = ''): | ||||
|         fi = open (filename, 'r') | ||||
|         content = '' | ||||
|         if encode=='': | ||||
|             content = fi.read() | ||||
|         elif encode=='base64': | ||||
|             content = base64.b64encode(fi.read()) | ||||
|         else: | ||||
|             sys.exit(-1) | ||||
|         fi.close() | ||||
|         return content | ||||
|      | ||||
|     def set_company(self): | ||||
|         """Setze Unternehmensdaten (Allgemein, RML, Logo)""" | ||||
|          | ||||
|         vals = self.config.company_data | ||||
|         dummy,country_id = self._execute('ir.model.data', 'get_object_reference', 'base',vals['country_id'])         | ||||
|          | ||||
|         # RML-Header ist nun ein function-Feld | ||||
|         #if vals.get('rml_header',False): | ||||
|         #    vals['rml_header'] =  self._readAndReturnFile(vals['rml_header'])    | ||||
|          | ||||
|         if vals.get('logo',False): | ||||
|             vals['logo'] =  self._readAndReturnFile(vals['logo'], encode = 'base64') | ||||
|         vals['country_id'] = country_id | ||||
|         c_ids = self._execute('res.company', 'search', [],  ) | ||||
|         return self._execute('res.company', 'write', c_ids,  vals) | ||||
| 
 | ||||
|     def set_taxes(self): | ||||
|         """Setze nicht benötigte Steuern auf inaktiv""" | ||||
|          | ||||
|         tax_ids = self._execute('account.tax', 'search',  [('description','not in', self.config.valid_taxes)]) | ||||
|         return self._execute('account.tax', 'write', tax_ids, {'active': False}) | ||||
| 
 | ||||
|     def set_date_format(self): | ||||
|         """Setzen des Datumsformats """ | ||||
|          | ||||
|         lang_ids = self._execute('res.lang', 'search',  [('code','=','de_DE')]) | ||||
|         if lang_ids: | ||||
|             vals = { | ||||
|                 'date_format': '%d.%m.%Y', | ||||
|                 'time_format': '%H:%M:%S', | ||||
|                 'grouping': '[3,3]',     | ||||
|                 'thousands_sep': '.', | ||||
|                 'decimal_point': ',',            | ||||
|             } | ||||
|             self._execute('res.lang', 'write', lang_ids, vals) | ||||
|         else: | ||||
|             return False | ||||
|          | ||||
|         lang_ids = self._execute('res.lang', 'search',  [('code','=','en_US')]) | ||||
|         if lang_ids: | ||||
|             vals = { | ||||
|                 'grouping': '[3,3]',         | ||||
|             } | ||||
|             self._execute('res.lang', 'write', lang_ids, vals) | ||||
|         else: | ||||
|             return False       | ||||
|          | ||||
|         return True   | ||||
| 
 | ||||
| #     def set_report_types(self): | ||||
| #         """Setzen der Report Types auf RML (PDF)""" | ||||
| #          | ||||
| #         report_names = ['purchase.report_purchaseorder', | ||||
| #                       'purchase.report_purchasequotation', | ||||
| #                       'account.report_invoice', | ||||
| #                       'sale.report_saleorder', | ||||
| #                       'stock.report_picking'] | ||||
| #         report_ids = self._execute('ir.actions.report.xml', 'search', [('report_name','in',report_names)]) | ||||
| #         return self._execute('ir.actions.report.xml', 'write', report_ids, {'report_type': 'pdf'}) | ||||
| 
 | ||||
|     def purchase_config(self): | ||||
|         """Basiskonfiguration für Einkauf laden""" | ||||
|          | ||||
|         if hasattr(self.config, 'purchase_config'): | ||||
|             vals = self._execute('purchase.config.settings', 'default_get', [])   | ||||
|             vals.update(self.config.purchase_config)            | ||||
|             wizard_id = self._execute('purchase.config.settings', 'create', vals) | ||||
|             return self._execute('purchase.config.settings', 'execute', [wizard_id]) | ||||
| 
 | ||||
|     def sale_config(self): | ||||
|         """Basiskonfiguration für Verkauf laden""" | ||||
| 
 | ||||
|         vals = self._execute('sale.config.settings', 'default_get', []) | ||||
|         vals.update(self.config.sale_config) | ||||
|         wizard_id = self._execute('sale.config.settings', 'create', vals) | ||||
|         return self._execute('sale.config.settings', 'execute', [wizard_id])    | ||||
|      | ||||
|     def base_config(self): | ||||
|         """Allgemeine Konfiguration laden""" | ||||
| 
 | ||||
|         vals = self._execute('base.config.settings', 'default_get', []) | ||||
|         vals.update(self.config.base_config)     | ||||
|         wizard_id = self._execute('base.config.settings', 'create', vals) | ||||
|         return self._execute('base.config.settings', 'execute', [wizard_id]) | ||||
| 
 | ||||
|     def install_module_sale(self): | ||||
|         """Modul 'Sale' installieren""" | ||||
| 
 | ||||
|         modules_to_install = self._execute('ir.module.module', 'search', [('name','=','sale'),('state','!=','installed')]) | ||||
|         res = self._execute('ir.module.module', 'button_install', modules_to_install)    | ||||
|         res = self._execute('base.module.upgrade', 'upgrade_module', modules_to_install) | ||||
|         return True | ||||
|      | ||||
|     def install_modules(self): | ||||
|         """Module installieren""" | ||||
| 
 | ||||
|         modules_to_install = self._execute('ir.module.module', 'search', [('name','in',self.config.modules),('state','!=','installed')]) | ||||
|         res = self._execute('ir.module.module', 'button_install', modules_to_install)    | ||||
|         res = self._execute('base.module.upgrade', 'upgrade_module', modules_to_install) | ||||
|         return True | ||||
| 
 | ||||
|     def set_dokumentennummern(self): | ||||
|         """Dokumentennummern setzen""" | ||||
|          | ||||
|         seq_dict = self.config.sequences | ||||
|          | ||||
|          # Lieferschein | ||||
|         if seq_dict.get('picking.out',False):            | ||||
|             picking_type_ids = self._execute('stock.picking.type', 'search', []) | ||||
|             picking_types = self._execute('stock.picking.type', 'read', picking_type_ids, ['sequence_id']) | ||||
|             s_ids = [t['sequence_id'][0] for t in picking_types] | ||||
|             if not self._execute('ir.sequence', 'write', s_ids, seq_dict.get('picking.out')): | ||||
|                 return False | ||||
|          | ||||
|         # Angebot | ||||
|         if seq_dict.get('sale.order',False): | ||||
|             s_ids = self._execute('ir.sequence', 'search', [('code','=','sale.order')]) | ||||
|             if len(s_ids) != 1: | ||||
|                 return False | ||||
|             if not self._execute('ir.sequence', 'write', s_ids, seq_dict.get('sale.order')): | ||||
|                 return False | ||||
|          | ||||
|         # EK-Angebot | ||||
|         if seq_dict.get('purchase.order',False): | ||||
|             s_ids = self._execute('ir.sequence', 'search', [('code','=','purchase.order')]) | ||||
|             if len(s_ids) != 1: | ||||
|                 return False | ||||
|             if not self._execute('ir.sequence', 'write', s_ids, seq_dict.get('purchase.order')): | ||||
|                 return False         | ||||
|          | ||||
|         # Rechnungsnummer | ||||
|         if seq_dict.get('account.invoice',False): | ||||
|             j_ids = self._execute('account.journal', 'search', [('code','=','VK')]) | ||||
|             if len(j_ids) != 1: | ||||
|                 return False | ||||
|             journals = self._execute('account.journal', 'read', j_ids, ['sequence_id']) | ||||
|             s_ids = [t['sequence_id'][0] for t in journals] | ||||
|             if not self._execute('ir.sequence', 'write', s_ids, seq_dict.get('account.invoicer')): | ||||
|                 return False  | ||||
| 
 | ||||
|         return True | ||||
| 
 | ||||
|     def set_admin_rights(self): | ||||
|         """Setze Administrator Rechte""" | ||||
|          | ||||
|         dummy,user_id = self._execute('ir.model.data', 'get_object_reference', 'base', 'user_root') | ||||
|         groups = [] | ||||
|          | ||||
|         # Technische Eigenschaften | ||||
|         dummy,group_id = self._execute('ir.model.data', 'get_object_reference', 'base', 'group_no_one') | ||||
|         groups.append((4,group_id)) | ||||
|          | ||||
|         # Finanzmanager | ||||
|         dummy,group_id = self._execute('ir.model.data', 'get_object_reference', 'account', 'group_account_manager') | ||||
|         groups.append((4,group_id)) | ||||
|          | ||||
|         vals = { | ||||
|             'groups_id': groups, | ||||
|         } | ||||
|          | ||||
|         return self._execute('res.users', 'write', [user_id], vals) | ||||
| 
 | ||||
|     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) | ||||
|         res = self._execute('account.installer', 'action_next', [wizard_id]) | ||||
|         return True   | ||||
| 
 | ||||
|     def setup_accounting2(self): | ||||
|         """Konfiguration Kontenplan""" | ||||
|          | ||||
|         c = self.config | ||||
|         sales_tax_ids = self._execute('account.tax.template', 'search',  [('description','=', c.sales_tax),('parent_id','=',False)]) | ||||
|         if not sales_tax_ids: | ||||
|             return False | ||||
|         purchase_tax_ids = self._execute('account.tax.template', 'search',  [('description','=', c.purchase_tax),('parent_id','=',False)]) | ||||
|         if not purchase_tax_ids: | ||||
|             return False | ||||
|          | ||||
|         #Set Your Accounting Options  | ||||
|         dummy,currency_id = self._execute('ir.model.data', 'get_object_reference', 'base', 'EUR') | ||||
|         vals = {}    | ||||
|         vals['chart_template_id'] = c.chart_template_id | ||||
|         vals['sale_tax'] = sales_tax_ids[0] | ||||
|         vals['purchase_tax'] = purchase_tax_ids[0]      | ||||
|         vals['company_id'] = 1 # Default | ||||
|         vals['currency_id'] = currency_id   | ||||
|         wizard_id = self._execute('wizard.multi.charts.accounts', 'create', vals) | ||||
|         res = self._execute('wizard.multi.charts.accounts', 'action_next', [wizard_id]) | ||||
|         return True | ||||
|      | ||||
|     def uninstall_chat(self): | ||||
|         """ Chat-Modul deinstallieren """ | ||||
|          | ||||
|         modules = ['im_chat','im_odoo_support','bus'] | ||||
|         modules_to_install = self._execute('ir.module.module', 'search', [('name','in',modules)]) | ||||
|         res = self._execute('ir.module.module', 'button_uninstall', modules_to_install)    | ||||
|         res = self._execute('base.module.upgrade', 'upgrade_module', modules_to_install) | ||||
|         return True         | ||||
| 
 | ||||
|     def set_uom(self): | ||||
|         """ Mengeneinheiten setzen""" | ||||
|          | ||||
|         context = {'lang': 'de_DE'} | ||||
|         c = self.config | ||||
|         active_uoms = c.active_uoms.keys() | ||||
| 
 | ||||
|         active_ids = [] | ||||
|         for uom_xml_id in active_uoms: | ||||
|             uom_id = self._execute('ir.model.data', 'xmlid_to_res_id', uom_xml_id) | ||||
|             active_ids.append(uom_id) | ||||
|              | ||||
|         # Set all other UOMs to inactive | ||||
|         inactive_ids = self._execute('product.uom', 'search', [('id','not in',active_ids)]) | ||||
|         res = self._execute('product.uom', 'write', inactive_ids, {'active': False}) | ||||
|         if not res: | ||||
|             return False | ||||
|          | ||||
|         # Update names | ||||
|         for uom_xml_id,name in c.active_uoms.items(): | ||||
|             uom_id = self._execute('ir.model.data', 'xmlid_to_res_id', uom_xml_id) | ||||
|             res = self._execute('product.uom', 'write', [uom_id], {'name': name}, context) | ||||
|             if not res: | ||||
|                 return False | ||||
|         return True | ||||
| 
 | ||||
|     def set_steuerzuordnung(self): | ||||
|         """Steuerzuordnungen setzen""" | ||||
|          | ||||
|         c = self.config | ||||
|                  | ||||
|         # Ungültige Steuerzuordnungen auf inaktiv setzen | ||||
|         invalid_ids = self._execute('account.fiscal.position', 'search', [('name','not in',c.valid_fiscal_positions)]) | ||||
|         self._execute('account.fiscal.position', 'write', invalid_ids, {'active': False}) | ||||
|          | ||||
|         # Mappings inaktiver Steuern löschen (also wenn rechte Seite eine inaktive Steuer ist, wie z.B "strf. i.g.L")) | ||||
|         valid_position_ids = self._execute('account.fiscal.position', 'search', [('name','in',c.valid_fiscal_positions)]) | ||||
|         valid_tax_ids = self._execute('account.tax', 'search', [('parent_id','=',False)]) | ||||
|          | ||||
|         position_tax_line_ids = self._execute('account.fiscal.position.tax', 'search', [('position_id','in',valid_position_ids),('tax_dest_id','not in',valid_tax_ids)]) | ||||
|         vals = {'tax_dest_id': False} | ||||
|         return self._execute('account.fiscal.position.tax', 'write', position_tax_line_ids, vals) | ||||
|      | ||||
|     def update_module(self): | ||||
|         """Aktualisiere Modul""" | ||||
|         module_name = self.config.module_name | ||||
|         mod_ids = self._execute('ir.module.module', 'search', [('name','=',module_name),('state','=','installed')]) | ||||
|         if not len(mod_ids) == 1: | ||||
|            raise "Module '%s' not found or ist not installed." % module_name | ||||
|         | ||||
|         res = self._execute('ir.module.module', 'button_upgrade', mod_ids)    | ||||
|         res = self._execute('base.module.upgrade', 'upgrade_module', mod_ids) | ||||
|         return True | ||||
|      | ||||