From cd489c156a0572a400b74e721a6be58c97cad8e0 Mon Sep 17 00:00:00 2001
From: Daniel Reis
Date: Fri, 30 Jan 2015 11:36:14 +0000
Subject: [PATCH] Remove files from deprecated project
---
.coveragerc | 19 -
.gitignore | 56 ---
.travis.yml | 44 --
README.md | 2 +-
.../__init__.py | 22 -
.../__openerp__.py | 48 --
.../account_analytic_analysis_recurring.pot | 129 -----
.../account_analytic_analysis_recurring.py | 209 --------
...count_analytic_analysis_recurring_cron.xml | 16 -
...count_analytic_analysis_recurring_view.xml | 44 --
__unported__/analytic_hours_block/__init__.py | 24 -
.../analytic_hours_block/__openerp__.py | 59 ---
.../analytic_hours_block/hours_block.py | 426 ----------------
.../analytic_hours_block/hours_block_data.xml | 24 -
.../analytic_hours_block/hours_block_menu.xml | 25 -
.../analytic_hours_block/hours_block_view.xml | 172 -------
.../i18n/analytic_hours_block.pot | 470 ------------------
__unported__/analytic_hours_block/product.py | 38 --
.../analytic_hours_block/product_view.xml | 18 -
__unported__/analytic_hours_block/project.py | 33 --
.../analytic_hours_block/project_view.xml | 19 -
__unported__/analytic_hours_block/report.xml | 12 -
.../analytic_hours_block/report/__init__.py | 21 -
.../report/hours_block.py | 53 --
.../report/hours_block.rml | 263 ----------
.../security/hours_block_security.xml | 11 -
.../security/ir.model.access.csv | 3 -
__unported__/project_sla/__init__.py | 5 -
__unported__/project_sla/__openerp__.py | 132 -----
__unported__/project_sla/analytic_account.py | 69 ---
.../project_sla/analytic_account_view.xml | 24 -
__unported__/project_sla/i18n/project_sla.pot | 296 -----------
.../project_sla/images/10_sla_contract.png | Bin 18059 -> 0 bytes
.../project_sla/images/20_sla_definition.png | Bin 19141 -> 0 bytes
.../project_sla/images/30_sla_controlled.png | Bin 26418 -> 0 bytes
__unported__/project_sla/m2m.py | 75 ---
__unported__/project_sla/project_issue.py | 29 --
.../project_sla/project_issue_view.xml | 60 ---
__unported__/project_sla/project_sla.py | 86 ----
.../project_sla/project_sla_control.py | 322 ------------
.../project_sla/project_sla_control_data.xml | 18 -
.../project_sla/project_sla_control_view.xml | 25 -
__unported__/project_sla/project_sla_demo.xml | 138 -----
__unported__/project_sla/project_sla_view.xml | 48 --
__unported__/project_sla/project_view.xml | 20 -
.../project_sla/security/ir.model.access.csv | 8 -
.../project_sla/static/src/img/icon.png | Bin 9545 -> 0 bytes
__unported__/project_sla/test/project_sla.yml | 66 ---
48 files changed, 1 insertion(+), 3680 deletions(-)
delete mode 100644 .coveragerc
delete mode 100644 .gitignore
delete mode 100644 .travis.yml
delete mode 100644 __unported__/account_analytic_analysis_recurring/__init__.py
delete mode 100644 __unported__/account_analytic_analysis_recurring/__openerp__.py
delete mode 100644 __unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring.pot
delete mode 100644 __unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py
delete mode 100644 __unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring_cron.xml
delete mode 100644 __unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring_view.xml
delete mode 100644 __unported__/analytic_hours_block/__init__.py
delete mode 100644 __unported__/analytic_hours_block/__openerp__.py
delete mode 100644 __unported__/analytic_hours_block/hours_block.py
delete mode 100644 __unported__/analytic_hours_block/hours_block_data.xml
delete mode 100644 __unported__/analytic_hours_block/hours_block_menu.xml
delete mode 100644 __unported__/analytic_hours_block/hours_block_view.xml
delete mode 100644 __unported__/analytic_hours_block/i18n/analytic_hours_block.pot
delete mode 100644 __unported__/analytic_hours_block/product.py
delete mode 100644 __unported__/analytic_hours_block/product_view.xml
delete mode 100644 __unported__/analytic_hours_block/project.py
delete mode 100644 __unported__/analytic_hours_block/project_view.xml
delete mode 100644 __unported__/analytic_hours_block/report.xml
delete mode 100644 __unported__/analytic_hours_block/report/__init__.py
delete mode 100644 __unported__/analytic_hours_block/report/hours_block.py
delete mode 100644 __unported__/analytic_hours_block/report/hours_block.rml
delete mode 100644 __unported__/analytic_hours_block/security/hours_block_security.xml
delete mode 100644 __unported__/analytic_hours_block/security/ir.model.access.csv
delete mode 100644 __unported__/project_sla/__init__.py
delete mode 100644 __unported__/project_sla/__openerp__.py
delete mode 100644 __unported__/project_sla/analytic_account.py
delete mode 100644 __unported__/project_sla/analytic_account_view.xml
delete mode 100644 __unported__/project_sla/i18n/project_sla.pot
delete mode 100644 __unported__/project_sla/images/10_sla_contract.png
delete mode 100644 __unported__/project_sla/images/20_sla_definition.png
delete mode 100644 __unported__/project_sla/images/30_sla_controlled.png
delete mode 100644 __unported__/project_sla/m2m.py
delete mode 100644 __unported__/project_sla/project_issue.py
delete mode 100644 __unported__/project_sla/project_issue_view.xml
delete mode 100644 __unported__/project_sla/project_sla.py
delete mode 100644 __unported__/project_sla/project_sla_control.py
delete mode 100644 __unported__/project_sla/project_sla_control_data.xml
delete mode 100644 __unported__/project_sla/project_sla_control_view.xml
delete mode 100644 __unported__/project_sla/project_sla_demo.xml
delete mode 100644 __unported__/project_sla/project_sla_view.xml
delete mode 100644 __unported__/project_sla/project_view.xml
delete mode 100644 __unported__/project_sla/security/ir.model.access.csv
delete mode 100644 __unported__/project_sla/static/src/img/icon.png
delete mode 100644 __unported__/project_sla/test/project_sla.yml
diff --git a/.coveragerc b/.coveragerc
deleted file mode 100644
index a06f8bfe..00000000
--- a/.coveragerc
+++ /dev/null
@@ -1,19 +0,0 @@
-# Config file .coveragerc
-
-[report]
-omit =
- /usr/*
- */bin/*
- */lib/*
- */odoo/*
- */openerp/*
- */tests/*
- *__init__.py
-
-# Regexes for lines to exclude from consideration
-exclude_lines =
- # Have to re-enable the standard pragma
- pragma: no cover
-
- # Don't complain about null context checking
- if context is None:
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 890ff010..00000000
--- a/.gitignore
+++ /dev/null
@@ -1,56 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-env/
-bin/
-build/
-develop-eggs/
-dist/
-eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-*.egg-info/
-.installed.cfg
-*.egg
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.coverage
-.cache
-nosetests.xml
-coverage.xml
-
-# Translations
-*.mo
-
-# Pycharm
-.idea
-
-# Mr Developer
-.mr.developer.cfg
-.project
-.pydevproject
-
-# Rope
-.ropeproject
-
-# Sphinx documentation
-docs/_build/
-
-# Backup files
-*~
-*.swp
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 50be0b23..00000000
--- a/.travis.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-# Config file .travis.yml
-
-language: python
-
-python:
-# - "pypy" # not supported by odoo 8
-# - "3.4" # not supported by odoo 8
-# - "3.3" # not supported by odoo 8
- - "2.7"
-# - "2.6" # not supported by odoo 8
-
-env:
- - ODOO="https://github.com/savoirfairelinux/odoo/archive/setuptools-addons.tar.gz" # Temp until https://github.com/odoo/odoo/issues/185 or https://github.com/odoo/odoo/issues/441 is fixed
-# - ODOO="https://github.com/odoo/odoo/archive/master.tar.gz"
-# - ODOO="https://github.com/OCA/OCB/archive/master.zip"
-
-# Need coveralls for coverage reports
-# Need flake8 for pep8 testing
-# Manually get PyChart
-# Install tested version of odoo (official or ocb)
-# Get modules from other repos which have dependencies (in this case travel requires modules from lp:partner-contact-management and lp:openerp-hr
-install:
- - pip install coveralls flake8
- - pip install http://download.gna.org/pychart/PyChart-1.39.tar.gz
- - pip install ${ODOO}
-
-# Create databae
-# Pre-install modules and dependencies
-before_script:
- - createdb test
-
-# Test with flake, ignore F401 for __init__.py files, use a max length of 120
-# Run tests with coverage
-# Only test modules in repo (list populated by directories in repo)
-# Preload modules before testing to only run tests of repo's modules
-# Include current directory and dependent repos in addons-path as well as official addons
-script:
- - flake8 . --max-line-length=120 --exclude=__unported__ --filename=__init__.py --ignore=F401
- - flake8 . --max-line-length=120 --exclude=__unported__,__init__.py
- - odoo.py -d test --stop-after-init --init=$(python -c 'import os; print(",".join(x for x in os.listdir(".") if os.path.isdir(x) and not x.startswith(".") and x != "__unported__"))') --addons-path=$(pwd),`python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"`/addons
- - coverage run $(which odoo.py) -d test --test-enable --log-level=test --stop-after-init --init=$(python -c 'import os; print(",".join(x for x in os.listdir(".") if os.path.isdir(x) and not x.startswith(".") and x != "__unported__"))') --addons-path=$(pwd),`python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"`/addons
-
-after_success:
- coveralls
diff --git a/README.md b/README.md
index 16fe614c..4113e615 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
-**IMPORTANT**
+# Warning: DEPRECATED! #
These modules are now available from the [Project & Service Management](https://github.com/OCA/project-service) repository.
diff --git a/__unported__/account_analytic_analysis_recurring/__init__.py b/__unported__/account_analytic_analysis_recurring/__init__.py
deleted file mode 100644
index 7088b5aa..00000000
--- a/__unported__/account_analytic_analysis_recurring/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ()
-#
-# 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 .
-#
-##############################################################################
-
-import account_analytic_analysis_recurring
diff --git a/__unported__/account_analytic_analysis_recurring/__openerp__.py b/__unported__/account_analytic_analysis_recurring/__openerp__.py
deleted file mode 100644
index 7b8ae639..00000000
--- a/__unported__/account_analytic_analysis_recurring/__openerp__.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# 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 .
-#
-##############################################################################
-
-
-{
- 'name': 'Contracts Management recurring',
- 'version': '0.1',
- 'category': 'Other',
- 'description': """
-This module add a new feature in contracts to manage recurring invoice
-=======================================================================================
-
-This is a backport of the new V8 feature available in trunk and saas. With the V8 release this module will be deprecated.
-It also add a little feature, you can use #START# and #END# in the contract line to automatically insert the dates of the invoiced period.
-
-Backport done By Yannick Buron.
-""",
- 'author': 'OpenERP SA',
- 'website': 'http://openerp.com',
- 'depends': ['base', 'account_analytic_analysis'],
- 'data': [
- 'account_analytic_analysis_recurring_cron.xml',
- 'account_analytic_analysis_recurring_view.xml',
- ],
- 'demo': [''],
- 'test':[],
- 'installable': False,
- 'images': [],
-}
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/__unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring.pot b/__unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring.pot
deleted file mode 100644
index 7d2f21f1..00000000
--- a/__unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring.pot
+++ /dev/null
@@ -1,129 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_analytic_analysis_recurring
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 7.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-02-21 11:41+0000\n"
-"PO-Revision-Date: 2014-02-21 11:41+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
-
-#. module: account_analytic_analysis_recurring
-#: field:account.analytic.invoice.line,price_subtotal:0
-msgid "Sub Total"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: field:account.analytic.account,recurring_rule_type:0
-msgid "Recurrency"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: field:account.analytic.invoice.line,price_unit:0
-msgid "Unit Price"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: view:account.analytic.account:0
-msgid ". create invoices"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: view:account.analytic.account:0
-msgid "Account Analytic Lines"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: field:account.analytic.account,recurring_invoice_line_ids:0
-msgid "Invoice Lines"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: field:account.analytic.invoice.line,uom_id:0
-msgid "Unit of Measure"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: selection:account.analytic.account,recurring_rule_type:0
-msgid "Day(s)"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: help:account.analytic.account,recurring_rule_type:0
-msgid "Invoice automatically repeat at specified interval"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: field:account.analytic.invoice.line,product_id:0
-msgid "Product"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: field:account.analytic.invoice.line,name:0
-msgid "Description"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: field:account.analytic.account,recurring_interval:0
-msgid "Repeat Every"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: view:account.analytic.account:0
-msgid "Recurring Invoices"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: field:account.analytic.account,recurring_invoices:0
-msgid "Generate recurring invoices automatically"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: selection:account.analytic.account,recurring_rule_type:0
-msgid "Year(s)"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: selection:account.analytic.account,recurring_rule_type:0
-msgid "Week(s)"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: field:account.analytic.invoice.line,quantity:0
-msgid "Quantity"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: model:ir.model,name:account_analytic_analysis_recurring.model_account_analytic_invoice_line
-msgid "account.analytic.invoice.line"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: field:account.analytic.account,recurring_next_date:0
-msgid "Date of Next Invoice"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: field:account.analytic.invoice.line,analytic_account_id:0
-#: model:ir.model,name:account_analytic_analysis_recurring.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: selection:account.analytic.account,recurring_rule_type:0
-msgid "Month(s)"
-msgstr ""
-
-#. module: account_analytic_analysis_recurring
-#: help:account.analytic.account,recurring_interval:0
-msgid "Repeat every (Days/Week/Month/Year)"
-msgstr ""
-
-
diff --git a/__unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py b/__unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py
deleted file mode 100644
index 2b85cce6..00000000
--- a/__unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py
+++ /dev/null
@@ -1,209 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# 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 .
-#
-##############################################################################
-from dateutil.relativedelta import relativedelta
-import datetime
-import logging
-import time
-
-from openerp.osv import osv, fields
-from openerp.osv.orm import intersect, except_orm
-import openerp.tools
-from openerp.tools.translate import _
-
-from openerp.addons.decimal_precision import decimal_precision as dp
-
-_logger = logging.getLogger(__name__)
-
-class account_analytic_invoice_line(osv.osv):
- _name = "account.analytic.invoice.line"
-
- def _amount_line(self, cr, uid, ids, prop, unknow_none, unknow_dict, context=None):
- res = {}
- for line in self.browse(cr, uid, ids, context=context):
- res[line.id] = line.quantity * line.price_unit
- if line.analytic_account_id.pricelist_id:
- cur = line.analytic_account_id.pricelist_id.currency_id
- res[line.id] = self.pool.get('res.currency').round(cr, uid, cur, res[line.id])
- return res
-
- _columns = {
- 'product_id': fields.many2one('product.product','Product',required=True),
- 'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account'),
- 'name': fields.text('Description', required=True),
- 'quantity': fields.float('Quantity', required=True),
- 'uom_id': fields.many2one('product.uom', 'Unit of Measure',required=True),
- 'price_unit': fields.float('Unit Price', required=True),
- 'price_subtotal': fields.function(_amount_line, string='Sub Total', type="float",digits_compute= dp.get_precision('Account')),
- }
- _defaults = {
- 'quantity' : 1,
- }
-
- def product_id_change(self, cr, uid, ids, product, uom_id, qty=0, name='', partner_id=False, price_unit=False, pricelist_id=False, company_id=None, context=None):
- context = context or {}
- uom_obj = self.pool.get('product.uom')
- company_id = company_id or False
- context.update({'company_id': company_id, 'force_company': company_id, 'pricelist_id': pricelist_id})
-
- if not product:
- return {'value': {'price_unit': 0.0}, 'domain':{'product_uom':[]}}
- if partner_id:
- part = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
- if part.lang:
- context.update({'lang': part.lang})
-
- result = {}
- res = self.pool.get('product.product').browse(cr, uid, product, context=context)
- result.update({'name':res.partner_ref or False,'uom_id': uom_id or res.uom_id.id or False, 'price_unit': res.list_price or 0.0})
- if res.description:
- result['name'] += '\n'+res.description
-
- res_final = {'value':result}
- if result['uom_id'] != res.uom_id.id:
- selected_uom = uom_obj.browse(cr, uid, result['uom_id'], context=context)
- new_price = uom_obj._compute_price(cr, uid, res.uom_id.id, res_final['value']['price_unit'], result['uom_id'])
- res_final['value']['price_unit'] = new_price
- return res_final
-
-
-class account_analytic_account(osv.osv):
- _name = "account.analytic.account"
- _inherit = "account.analytic.account"
-
- _columns = {
- 'recurring_invoice_line_ids': fields.one2many('account.analytic.invoice.line', 'analytic_account_id', 'Invoice Lines'),
- 'recurring_invoices' : fields.boolean('Generate recurring invoices automatically'),
- 'recurring_rule_type': fields.selection([
- ('daily', 'Day(s)'),
- ('weekly', 'Week(s)'),
- ('monthly', 'Month(s)'),
- ('yearly', 'Year(s)'),
- ], 'Recurrency', help="Invoice automatically repeat at specified interval"),
- 'recurring_interval': fields.integer('Repeat Every', help="Repeat every (Days/Week/Month/Year)"),
- 'recurring_next_date': fields.date('Date of Next Invoice'),
- }
-
- _defaults = {
- 'recurring_interval': 1,
- 'recurring_next_date': lambda *a: time.strftime('%Y-%m-%d'),
- 'recurring_rule_type':'monthly'
- }
-
- def onchange_recurring_invoices(self, cr, uid, ids, recurring_invoices, date_start=False, context=None):
- value = {}
- if date_start and recurring_invoices:
- value = {'value': {'recurring_next_date': date_start}}
- return value
-
- def _prepare_invoice(self, cr, uid, contract, context=None):
- context = context or {}
-
- inv_obj = self.pool.get('account.invoice')
- journal_obj = self.pool.get('account.journal')
- fpos_obj = self.pool.get('account.fiscal.position')
- lang_obj = self.pool.get('res.lang')
-
- if not contract.partner_id:
- raise osv.except_osv(_('No Customer Defined!'),_("You must first select a Customer for Contract %s!") % contract.name )
-
- fpos = contract.partner_id.property_account_position or False
- journal_ids = journal_obj.search(cr, uid, [('type', '=','sale'),('company_id', '=', contract.company_id.id or False)], limit=1)
- if not journal_ids:
- raise osv.except_osv(_('Error!'),
- _('Please define a sale journal for the company "%s".') % (contract.company_id.name or '', ))
-
- partner_payment_term = contract.partner_id.property_payment_term and contract.partner_id.property_payment_term.id or False
-
-
- inv_data = {
- 'reference': contract.code or False,
- 'account_id': contract.partner_id.property_account_receivable.id,
- 'type': 'out_invoice',
- 'partner_id': contract.partner_id.id,
- 'currency_id': contract.partner_id.property_product_pricelist.id or False,
- 'journal_id': len(journal_ids) and journal_ids[0] or False,
- 'date_invoice': contract.recurring_next_date,
- 'origin': contract.name,
- 'fiscal_position': fpos and fpos.id,
- 'payment_term': partner_payment_term,
- 'company_id': contract.company_id.id or False,
- }
- invoice_id = inv_obj.create(cr, uid, inv_data, context=context)
-
- for line in contract.recurring_invoice_line_ids:
-
- res = line.product_id
- account_id = res.property_account_income.id
- if not account_id:
- account_id = res.categ_id.property_account_income_categ.id
- account_id = fpos_obj.map_account(cr, uid, fpos, account_id)
-
- taxes = res.taxes_id or False
- tax_id = fpos_obj.map_tax(cr, uid, fpos, taxes)
-
- if 'old_date' in context:
- lang_ids = lang_obj.search(cr, uid, [('code', '=', contract.partner_id.lang)], context=context)
- format = lang_obj.browse(cr, uid, lang_ids, context=context)[0].date_format
- line.name = line.name.replace('#START#', context['old_date'].strftime(format))
- line.name = line.name.replace('#END#', context['next_date'].strftime(format))
-
- invoice_line_vals = {
- 'name': line.name,
- 'account_id': account_id,
- 'account_analytic_id': contract.id,
- 'price_unit': line.price_unit or 0.0,
- 'quantity': line.quantity,
- 'uos_id': line.uom_id.id or False,
- 'product_id': line.product_id.id or False,
- 'invoice_id' : invoice_id,
- 'invoice_line_tax_id': [(6, 0, tax_id)],
- }
- self.pool.get('account.invoice.line').create(cr, uid, invoice_line_vals, context=context)
-
- inv_obj.button_compute(cr, uid, [invoice_id], context=context)
- return invoice_id
-
- def recurring_create_invoice(self, cr, uid, automatic=False, context=None):
- context = context or {}
- current_date = time.strftime('%Y-%m-%d')
-
- contract_ids = self.search(cr, uid, [('recurring_next_date','<=', current_date), ('state','=', 'open'), ('recurring_invoices','=', True)])
- for contract in self.browse(cr, uid, contract_ids, context=context):
-
- next_date = datetime.datetime.strptime(contract.recurring_next_date or current_date, "%Y-%m-%d")
- interval = contract.recurring_interval
- if contract.recurring_rule_type == 'daily':
- old_date = next_date-relativedelta(days=+interval)
- new_date = next_date+relativedelta(days=+interval)
- elif contract.recurring_rule_type == 'weekly':
- old_date = next_date-relativedelta(weeks=+interval)
- new_date = next_date+relativedelta(weeks=+interval)
- else:
- old_date = next_date+relativedelta(months=+interval)
- new_date = next_date+relativedelta(months=+interval)
-
- context['old_date'] = old_date
- context['next_date'] = datetime.datetime.strptime(contract.recurring_next_date or current_date,"%Y-%m-%d")
- invoice_id = self._prepare_invoice(cr, uid, contract, context=context)
-
- self.write(cr, uid, [contract.id], {'recurring_next_date': new_date.strftime('%Y-%m-%d')}, context=context)
- return True
-
diff --git a/__unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring_cron.xml b/__unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring_cron.xml
deleted file mode 100644
index 95ae54de..00000000
--- a/__unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring_cron.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
- Generate Recurring Invoices from Contracts
- 1
- days
- -1
-
-
-
-
-
-
-
diff --git a/__unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring_view.xml b/__unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring_view.xml
deleted file mode 100644
index e2893476..00000000
--- a/__unported__/account_analytic_analysis_recurring/account_analytic_analysis_recurring_view.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
- account.analytic.account.invoice.recurring.form.inherit
- account.analytic.account
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/__unported__/analytic_hours_block/__init__.py b/__unported__/analytic_hours_block/__init__.py
deleted file mode 100644
index 81ba8d05..00000000
--- a/__unported__/analytic_hours_block/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Vincent Renaville, ported by Joel Grand-Guillaume
-# Copyright 2010-2012 Camptocamp SA
-#
-# 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 .
-#
-##############################################################################
-import hours_block
-import report
-import product
-import project
diff --git a/__unported__/analytic_hours_block/__openerp__.py b/__unported__/analytic_hours_block/__openerp__.py
deleted file mode 100644
index 221561ea..00000000
--- a/__unported__/analytic_hours_block/__openerp__.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Vincent Renaville, ported by Joel Grand-Guillaume
-# Copyright 2010-2012 Camptocamp SA
-#
-# 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 .
-#
-##############################################################################
-
-{
- "name": "Project Hours Blocks Management",
- "version": "1.5",
- "category": "Generic Modules/Projects & Services",
- "description": """
-Project Hours Blocks Management
-===============================
-
-This module allows you to handle hours blocks,
-to follow for example the user support contracts.
-This means, you sell a product of type "hours block"
-then you input the spent hours on the hours block and
-you can track and follow how much has been used.
-
- """,
- "author": "Camptocamp",
- "license": 'AGPL-3',
- "website": "http://www.camptocamp.com",
- "depends": [
- "account",
- "hr_timesheet_invoice",
- "analytic",
- "project",
- ],
- "data": [
- "report.xml",
- "hours_block_view.xml",
- "hours_block_data.xml",
- "hours_block_menu.xml",
- "product_view.xml",
- "project_view.xml",
- "report.xml",
- "security/hours_block_security.xml",
- "security/ir.model.access.csv",
- ],
- "active": False,
- "installable": False
-}
diff --git a/__unported__/analytic_hours_block/hours_block.py b/__unported__/analytic_hours_block/hours_block.py
deleted file mode 100644
index e29c5a6b..00000000
--- a/__unported__/analytic_hours_block/hours_block.py
+++ /dev/null
@@ -1,426 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Vincent Renaville, ported by Joel Grand-Guillaume
-# Copyright 2010-2012 Camptocamp SA
-#
-# 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 .
-#
-##############################################################################
-
-from openerp.osv import orm, fields
-
-
-class AccountHoursBlock(orm.Model):
- _name = "account.hours.block"
- _inherit = ['mail.thread']
-
- def _get_last_action(self, cr, uid, ids, name, arg, context=None):
- """ Return the last analytic line date for an invoice"""
- res = {}
- for block in self.browse(cr, uid, ids, context=context):
- cr.execute("SELECT max(al.date) FROM account_analytic_line AS al"
- " WHERE al.invoice_id = %s", (block.invoice_id.id,))
- fetch_res = cr.fetchone()
- res[block.id] = fetch_res[0] if fetch_res else False
- return res
-
- def _compute_hours(self, cr, uid, ids, fields, args, context=None):
- """Return a dict of [id][fields]"""
- if isinstance(ids, (int, long)):
- ids = [ids]
- result = {}
- aal_obj = self.pool.get('account.analytic.line')
- for block in self.browse(cr, uid, ids, context=context):
- result[block.id] = {'amount_hours_block': 0.0,
- 'amount_hours_block_done': 0.0}
- # Compute hours bought
- for line in block.invoice_id.invoice_line:
- hours_bought = 0.0
- if line.product_id and line.product_id.is_in_hours_block:
- # We will now calculate the product_quantity
- factor = line.uos_id.factor
- if factor == 0.0:
- factor = 1.0
- amount = line.quantity
- hours_bought += (amount / factor)
- result[block.id]['amount_hours_block'] += hours_bought
-
- # Compute hours spent
- hours_used = 0.0
- # Get ids of analytic line generated from
- # timesheet associated to the current block
- cr.execute("SELECT al.id "
- "FROM account_analytic_line AS al, "
- " account_analytic_journal AS aj "
- "WHERE aj.id = al.journal_id "
- "AND aj.type = 'general' "
- "AND al.invoice_id = %s", (block.invoice_id.id,))
- res_line_ids = cr.fetchall()
- line_ids = [l[0] for l in res_line_ids] if res_line_ids else []
- for line in aal_obj.browse(cr, uid, line_ids, context=context):
- factor = 1.0
- if line.product_uom_id and line.product_uom_id.factor != 0.0:
- factor = line.product_uom_id.factor
- factor_invoicing = 1.0
- if line.to_invoice and line.to_invoice.factor != 0.0:
- factor_invoicing = 1.0 - line.to_invoice.factor / 100
- hours_used += ((line.unit_amount / factor) * factor_invoicing)
- result[block.id]['amount_hours_block_done'] = hours_used
- return result
-
- def _compute_amount(self, cr, uid, ids, fields, args, context=None):
- if context is None:
- context = {}
- result = {}
- aal_obj = self.pool.get('account.analytic.line')
- pricelist_obj = self.pool.get('product.pricelist')
- for block in self.browse(cr, uid, ids, context=context):
- result[block.id] = {'amount_hours_block': 0.0,
- 'amount_hours_block_done': 0.0}
-
- # Compute amount bought
- for line in block.invoice_id.invoice_line:
- amount_bought = 0.0
- if line.product_id:
- ## We will now calculate the product_quantity
- factor = line.uos_id.factor
- if factor == 0.0:
- factor = 1.0
- amount = line.quantity * line.price_unit
- amount_bought += (amount / factor)
- result[block.id]['amount_hours_block'] += amount_bought
-
- # Compute total amount
- # Get ids of analytic line generated from timesheet associated to current block
- cr.execute("SELECT al.id FROM account_analytic_line AS al,"
- " account_analytic_journal AS aj"
- " WHERE aj.id = al.journal_id"
- " AND aj.type='general'"
- " AND al.invoice_id = %s", (block.invoice_id.id,))
- res_line_ids = cr.fetchall()
- line_ids = [l[0] for l in res_line_ids] if res_line_ids else []
- total_amount = 0.0
- for line in aal_obj.browse(cr, uid, line_ids, context=context):
- factor_invoicing = 1.0
- if line.to_invoice and line.to_invoice.factor != 0.0:
- factor_invoicing = 1.0 - line.to_invoice.factor / 100
-
- ctx = dict(context, uom=line.product_uom_id.id)
- amount = pricelist_obj.price_get(
- cr, uid,
- [line.account_id.pricelist_id.id],
- line.product_id.id,
- line.unit_amount or 1.0,
- line.account_id.partner_id.id or False,
- ctx)[line.account_id.pricelist_id.id]
- total_amount += amount * line.unit_amount * factor_invoicing
- result[block.id]['amount_hours_block_done'] += total_amount
-
- return result
-
- def _compute(self, cr, uid, ids, fields, args, context=None):
- result = {}
- block_per_types = {}
- for block in self.browse(cr, uid, ids, context=context):
- block_per_types.setdefault(block.type, []).append(block.id)
-
- for block_type in block_per_types:
- if block_type:
- func = getattr(self, "_compute_%s" % block_type)
- result.update(func(cr, uid, ids, fields, args, context=context))
-
- for block in result:
- result[block]['amount_hours_block_delta'] = \
- result[block]['amount_hours_block'] - \
- result[block]['amount_hours_block_done']
- return result
-
- def _get_analytic_line(self, cr, uid, ids, context=None):
- invoice_ids = []
- an_lines_obj = self.pool.get('account.analytic.line')
- block_obj = self.pool.get('account.hours.block')
- for line in an_lines_obj.browse(cr, uid, ids, context=context):
- if line.invoice_id:
- invoice_ids.append(line.invoice_id.id)
- return block_obj.search(
- cr, uid, [('invoice_id', 'in', invoice_ids)], context=context)
-
- def _get_invoice(self, cr, uid, ids, context=None):
- block_ids = set()
- inv_obj = self.pool.get('account.invoice')
- for invoice in inv_obj.browse(cr, uid, ids, context=context):
- block_ids.update([inv.id for inv in invoice.account_hours_block_ids])
- return list(block_ids)
-
- def action_send_block(self, cr, uid, ids, context=None):
- """Open a form to send by email. Return an action dict."""
-
- assert len(ids) == 1, '''\
- This option should only be used for a single ID at a time.'''
-
- ir_model_data = self.pool.get('ir.model.data')
-
- try:
- template_id = ir_model_data.get_object_reference(
- cr, uid, 'analytic_hours_block', 'email_template_hours_block'
- )[1]
- except ValueError:
- template_id = False
-
- try:
- compose_form_id = ir_model_data.get_object_reference(
- cr, uid, 'mail', 'email_compose_message_wizard_form'
- )[1]
- except ValueError:
- compose_form_id = False
-
- ctx = {
- 'default_model': self._name,
- 'default_res_id': ids[0],
- 'default_use_template': bool(template_id),
- 'default_template_id': template_id,
- 'default_composition_mode': 'comment',
- }
- return {
- 'type': 'ir.actions.act_window',
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'mail.compose.message',
- 'views': [(compose_form_id, 'form')],
- 'view_id': compose_form_id,
- 'target': 'new',
- 'context': ctx,
- }
-
- _recompute_triggers = {
- 'account.hours.block': (lambda self, cr, uid, ids, c=None:
- ids, ['invoice_id', 'type'], 10),
- 'account.invoice': (_get_invoice, ['analytic_line_ids'], 10),
- 'account.analytic.line': (
- _get_analytic_line,
- ['product_uom_id', 'unit_amount', 'to_invoice', 'invoice_id'],
- 10),
- }
-
- _columns = {
- 'amount_hours_block': fields.function(
- _compute,
- type='float',
- string='Quantity / Amount bought',
- store=_recompute_triggers,
- multi='amount_hours_block_delta',
- help="Amount bought by the customer. "
- "This amount is expressed in the base Unit of Measure "
- "(factor=1.0)"),
- 'amount_hours_block_done': fields.function(
- _compute,
- type='float',
- string='Quantity / Amount used',
- store=_recompute_triggers,
- multi='amount_hours_block_delta',
- help="Amount done by the staff. "
- "This amount is expressed in the base Unit of Measure "
- "(factor=1.0)"),
- 'amount_hours_block_delta': fields.function(
- _compute,
- type='float',
- string='Difference',
- store=_recompute_triggers,
- multi='amount_hours_block_delta',
- help="Difference between bought and used. "
- "This amount is expressed in the base Unit of Measure "
- "(factor=1.0)"),
- 'last_action_date': fields.function(
- _get_last_action,
- type='date',
- string='Last action date',
- help="Date of the last analytic line linked to the invoice "
- "related to this block hours."),
- 'close_date': fields.date('Closed Date'),
- 'invoice_id': fields.many2one(
- 'account.invoice',
- 'Invoice',
- ondelete='cascade',
- required=True),
- 'type': fields.selection(
- [('hours', 'Hours'),
- ('amount', 'Amount')],
- string='Type of Block',
- required=True,
- help="The block is based on the quantity of hours "
- "or on the amount."),
-
- # Invoices related infos
- 'date_invoice': fields.related(
- 'invoice_id', 'date_invoice',
- type="date",
- string="Invoice Date",
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['date_invoice'], 10),
- },
- readonly=True),
- 'user_id': fields.related(
- 'invoice_id', 'user_id',
- type="many2one",
- relation="res.users",
- string="Salesman",
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['user_id'], 10),
- },
- readonly=True),
- 'partner_id': fields.related(
- 'invoice_id', 'partner_id',
- type="many2one",
- relation="res.partner",
- string="Partner",
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['partner_id'], 10),
- },
- readonly=True),
- 'name': fields.related(
- 'invoice_id', 'name',
- type="char",
- string="Description",
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['name'], 10),
- },
- readonly=True),
- 'number': fields.related(
- 'invoice_id', 'number',
- type="char",
- string="Number",
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['number'], 10),
- },
- readonly=True),
- 'journal_id': fields.related(
- 'invoice_id', 'journal_id',
- type="many2one",
- relation="account.journal",
- string="Journal",
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['journal_id'], 10),
- },
- readonly=True),
- 'period_id': fields.related(
- 'invoice_id', 'period_id',
- type="many2one",
- relation="account.period",
- string="Period",
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['period_id'], 10),
- },
- readonly=True),
- 'company_id': fields.related(
- 'invoice_id', 'company_id',
- type="many2one",
- relation="res.company",
- string="Company",
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['company_id'], 10),
- },
- readonly=True),
- 'currency_id': fields.related(
- 'invoice_id', 'currency_id',
- type="many2one",
- relation="res.currency",
- string="Currency",
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['currency_id'], 10),
- },
- readonly=True),
- 'residual': fields.related(
- 'invoice_id', 'residual',
- type="float",
- string="Residual",
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['residual'], 10),
- },
- readonly=True),
- 'amount_total': fields.related(
- 'invoice_id', 'amount_total',
- type="float",
- string="Total",
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['amount_total'], 10),
- },
- readonly=True),
- 'department_id': fields.related(
- 'invoice_id', 'department_id',
- type='many2one',
- relation='hr.department',
- string='Department',
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['department_id'], 10),
- },
- readonly=True),
-
- 'state': fields.related(
- 'invoice_id', 'state',
- type='selection',
- selection=[
- ('draft', 'Draft'),
- ('proforma', 'Pro-forma'),
- ('proforma2', 'Pro-forma'),
- ('open', 'Open'),
- ('paid', 'Paid'),
- ('cancel', 'Cancelled'),
- ],
- string='State',
- readonly=True,
- store={
- 'account.hours.block': (lambda self, cr, uid, ids, c=None: ids,
- ['invoice_id'], 10),
- 'account.invoice': (_get_invoice, ['state'], 10),
- }),
- }
-
-
-############################################################################
-## Add hours blocks on invoice
-############################################################################
-class AccountInvoice(orm.Model):
- _inherit = 'account.invoice'
-
- _columns = {
- 'account_hours_block_ids': fields.one2many(
- 'account.hours.block',
- 'invoice_id',
- string='Hours Block')
- }
diff --git a/__unported__/analytic_hours_block/hours_block_data.xml b/__unported__/analytic_hours_block/hours_block_data.xml
deleted file mode 100644
index dc5f9eaa..00000000
--- a/__unported__/analytic_hours_block/hours_block_data.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
- Hours Block - Send by Email
- ${(object.user_id.email or object.company_id.email or 'noreply@localhost')|safe}
- ${object.company_id.name} Hours Block (Ref ${object.number or 'n/a'})
- ${object.partner_id.id}
-
-
-
- Hours_Block_${(object.number or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''}
- ${object.partner_id.lang}
- Hello ${object.partner_id.name},
-
- Please find attached your Hours Block Report.
- Best regards.
- ]]>
-
-
-
diff --git a/__unported__/analytic_hours_block/hours_block_menu.xml b/__unported__/analytic_hours_block/hours_block_menu.xml
deleted file mode 100644
index 7b32b14b..00000000
--- a/__unported__/analytic_hours_block/hours_block_menu.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
- {'search_default_running': 1, 'search_default_group_department_id': 1}
- Hours Blocks
- account.hours.block
- form
- tree,form
-
-
-
-
-
-
-
-
diff --git a/__unported__/analytic_hours_block/hours_block_view.xml b/__unported__/analytic_hours_block/hours_block_view.xml
deleted file mode 100644
index 118f914e..00000000
--- a/__unported__/analytic_hours_block/hours_block_view.xml
+++ /dev/null
@@ -1,172 +0,0 @@
-
-
-
-
-
-
- account.hours.block.select
- account.hours.block
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- account.hours.block.form
- account.hours.block
-
-
-
-
-
-
- account.hours.block.tree
- account.hours.block
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/__unported__/analytic_hours_block/i18n/analytic_hours_block.pot b/__unported__/analytic_hours_block/i18n/analytic_hours_block.pot
deleted file mode 100644
index e8597111..00000000
--- a/__unported__/analytic_hours_block/i18n/analytic_hours_block.pot
+++ /dev/null
@@ -1,470 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * analytic_hours_block
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 7.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-08 12:49+0000\n"
-"PO-Revision-Date: 2014-01-08 12:49+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Maintenance And Support Summary"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Invoice Date:"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Group By..."
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Bought"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,close_date:0
-msgid "Closed Date"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,message_unread:0
-msgid "Unread Messages"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,company_id:0
-msgid "Company"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,date_invoice:0
-msgid "Invoice Date"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,residual:0
-msgid "Residual"
-msgstr ""
-
-#. module: analytic_hours_block
-#: help:account.hours.block,amount_hours_block:0
-msgid "Amount bought by the customer. This amount is expressed in the base Unit of Measure (factor=1.0)"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Based on:"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,message_ids:0
-msgid "Messages"
-msgstr ""
-
-#. module: analytic_hours_block
-#: selection:account.hours.block,type:0
-msgid "Amount"
-msgstr ""
-
-#. module: analytic_hours_block
-#: selection:account.hours.block,state:0
-msgid "Cancelled"
-msgstr ""
-
-#. module: analytic_hours_block
-#: help:account.hours.block,message_unread:0
-msgid "If checked new messages require your attention."
-msgstr ""
-
-#. module: analytic_hours_block
-#: model:email.template,body_html:analytic_hours_block.email_template_hours_block
-msgid "\n"
-" Here is your Hours Block Report\n"
-" "
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Hours Quantity / Amount"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Remaining hours:"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Quantity of hours bought:"
-msgstr ""
-
-#. module: analytic_hours_block
-#: help:account.hours.block,message_summary:0
-msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Quantity of hours bought"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-#: field:account.hours.block,partner_id:0
-msgid "Partner"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Quantity of hours difference"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,period_id:0
-msgid "Period"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,state:0
-msgid "State"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,message_follower_ids:0
-msgid "Followers"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Send by Email"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "All Running Hours Block"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,last_action_date:0
-msgid "Last action date"
-msgstr ""
-
-#. module: analytic_hours_block
-#: selection:account.hours.block,type:0
-msgid "Hours"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Description:"
-msgstr ""
-
-#. module: analytic_hours_block
-#: help:account.hours.block,type:0
-msgid "The block is based on the quantity of hours or on the amount."
-msgstr ""
-
-#. module: analytic_hours_block
-#: model:email.template,report_name:analytic_hours_block.email_template_hours_block
-msgid "Hours_Block_${(object.number or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''}"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Remaining amount:"
-msgstr ""
-
-#. module: analytic_hours_block
-#: model:ir.model,name:analytic_hours_block.model_account_hours_block
-msgid "account.hours.block"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,amount_hours_block:0
-msgid "Quantity / Amount bought"
-msgstr ""
-
-#. module: analytic_hours_block
-#: model:ir.actions.report.xml,name:analytic_hours_block.block_hours_report
-msgid "Block Hours State"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Choose an invoice..."
-msgstr ""
-
-#. module: analytic_hours_block
-#: selection:account.hours.block,state:0
-msgid "Open"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "My invoices"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Draft Hours Blocks"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,currency_id:0
-msgid "Currency"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-#: field:account.hours.block,user_id:0
-msgid "Salesman"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Quantity of hours used"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-#: selection:account.hours.block,state:0
-msgid "Draft"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-#: model:ir.actions.act_window,name:analytic_hours_block.action_all_block_hour
-msgid "Hours Blocks"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,type:0
-msgid "Type of Block"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Used"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Total Amount"
-msgstr ""
-
-#. module: analytic_hours_block
-#: selection:account.hours.block,state:0
-msgid "Paid"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Page"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,message_is_follower:0
-msgid "Is a Follower"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Date"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.invoice,account_hours_block_ids:0
-#: model:ir.actions.act_window,name:analytic_hours_block.act_hours_block_from_invoice
-#: model:ir.ui.menu,name:analytic_hours_block.action_all_block_hour_account
-msgid "Hours Block"
-msgstr ""
-
-#. module: analytic_hours_block
-#: help:account.hours.block,last_action_date:0
-msgid "Date of the last analytic line linked to the invoice related to this block hours."
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Report Date:"
-msgstr ""
-
-#. module: analytic_hours_block
-#: model:email.template,subject:analytic_hours_block.email_template_hours_block
-msgid "${object.company_id.name} Hours Block (Ref ${object.number or 'n/a'})"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Invoice's related information"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Search Invoice"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Quantity"
-msgstr ""
-
-#. module: analytic_hours_block
-#: help:account.hours.block,amount_hours_block_delta:0
-msgid "Difference between bought and used. This amount is expressed in the base Unit of Measure (factor=1.0)"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "0.6cm 27.9cm 20.3cm 27.9cm"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Residual Amount"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Overdue Hours Block"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Amount used:"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,number:0
-msgid "Number"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-#: field:account.hours.block,invoice_id:0
-#: model:ir.actions.act_window,name:analytic_hours_block.act_invoice_from_hours_block
-#: model:ir.model,name:analytic_hours_block.model_account_invoice
-msgid "Invoice"
-msgstr ""
-
-#. module: analytic_hours_block
-#: selection:account.hours.block,state:0
-msgid "Pro-forma"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Responsible"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-#: field:account.hours.block,name:0
-msgid "Description"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Amount bought:"
-msgstr ""
-
-#. module: analytic_hours_block
-#: help:account.hours.block,amount_hours_block_done:0
-msgid "Amount done by the staff. This amount is expressed in the base Unit of Measure (factor=1.0)"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Quantity of hours used:"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Invoicing"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,amount_hours_block_done:0
-msgid "Quantity / Amount used"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,journal_id:0
-msgid "Journal"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Running"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-#: field:account.hours.block,amount_hours_block_delta:0
-msgid "Difference"
-msgstr ""
-
-#. module: analytic_hours_block
-#: model:ir.actions.act_window,name:analytic_hours_block.act_block_hour_from_partner
-msgid "All blocks hours"
-msgstr ""
-
-#. module: analytic_hours_block
-#: report:account.hours.block:0
-msgid "Deduced"
-msgstr ""
-
-#. module: analytic_hours_block
-#: model:ir.actions.act_window,name:analytic_hours_block.act_analytic_lines_from_hours_block
-msgid "Analytic Lines"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Invoice State"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,message_summary:0
-msgid "Summary"
-msgstr ""
-
-#. module: analytic_hours_block
-#: help:account.hours.block,message_ids:0
-msgid "Messages and communication history"
-msgstr ""
-
-#. module: analytic_hours_block
-#: view:account.hours.block:0
-msgid "Overdue"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:account.hours.block,amount_total:0
-msgid "Total"
-msgstr ""
-
-#. module: analytic_hours_block
-#: field:product.product,is_in_hours_block:0
-msgid "Accounted for hours block?"
-msgstr ""
-
-#. module: analytic_hours_block
-#: help:product.product,is_in_hours_block:0
-msgid "Specify if you want to have invoice lines containing this product to be considered for hours blocks."
-msgstr ""
-
diff --git a/__unported__/analytic_hours_block/product.py b/__unported__/analytic_hours_block/product.py
deleted file mode 100644
index 3835799a..00000000
--- a/__unported__/analytic_hours_block/product.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Matthieu Dietrich
-# Copyright 2014 Camptocamp SA
-#
-# 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 .
-#
-##############################################################################
-
-from openerp.osv import orm, fields
-
-
-class Product(orm.Model):
- _name = "product.product"
- _inherit = 'product.product'
-
- _columns = {
- 'is_in_hours_block': fields.boolean(
- 'Accounted for hours block?',
- help="Specify if you want to have invoice lines "
- "containing this product to be considered for hours blocks.")
- }
-
- _defaults = {
- 'is_in_hours_block': False
- }
diff --git a/__unported__/analytic_hours_block/product_view.xml b/__unported__/analytic_hours_block/product_view.xml
deleted file mode 100644
index c43fd0b3..00000000
--- a/__unported__/analytic_hours_block/product_view.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
- product.product.block.form
- product.product
-
-
-
-
-
-
-
-
-
-
-
diff --git a/__unported__/analytic_hours_block/project.py b/__unported__/analytic_hours_block/project.py
deleted file mode 100644
index 8c014ca5..00000000
--- a/__unported__/analytic_hours_block/project.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-from osv import orm
-from openerp.tools.translate import _
-
-
-class project_project(orm.Model):
- _inherit = 'project.project'
-
- def hours_block_tree_view(self, cr, uid, ids, context):
- invoice_line_obj = self.pool.get('account.invoice.line')
- hours_block_obj = self.pool.get('account.hours.block')
- project = self.browse(cr, uid , ids)[0]
- invoice_line_ids = invoice_line_obj.search(cr, uid, [('account_analytic_id', '=', project.analytic_account_id.id)])
- invoice_lines = invoice_line_obj.browse(cr, uid, invoice_line_ids)
- invoice_ids = [x.invoice_id.id for x in invoice_lines]
- res_ids = hours_block_obj.search(cr, uid, [('invoice_id','in',invoice_ids)])
- domain=False
- if res_ids:
- domain = [('id', 'in', res_ids)]
- else:
- raise orm.except_orm(_('Warning'), _("No Hours Block for this project"))
-
- return {
- 'name': _('Hours Blocks'),
- 'domain': domain,
- 'res_model': 'account.hours.block',
- 'type': 'ir.actions.act_window',
- 'view_id': False,
- 'view_mode': 'tree,form',
- 'view_type': 'form',
- 'limit': 80,
- 'res_id' : res_ids or False,
- }
diff --git a/__unported__/analytic_hours_block/project_view.xml b/__unported__/analytic_hours_block/project_view.xml
deleted file mode 100644
index 0b503a84..00000000
--- a/__unported__/analytic_hours_block/project_view.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
- project.project.form.hours.block.link
- project.project
-
- form
-
-
-
-
-
-
-
-
-
-
diff --git a/__unported__/analytic_hours_block/report.xml b/__unported__/analytic_hours_block/report.xml
deleted file mode 100644
index 9d60be43..00000000
--- a/__unported__/analytic_hours_block/report.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/__unported__/analytic_hours_block/report/__init__.py b/__unported__/analytic_hours_block/report/__init__.py
deleted file mode 100644
index 111d0eb4..00000000
--- a/__unported__/analytic_hours_block/report/__init__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Vincent Renaville, ported by Joel Grand-Guillaume
-# Copyright 2010-2012 Camptocamp SA
-#
-# 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 .
-#
-##############################################################################
-import hours_block
diff --git a/__unported__/analytic_hours_block/report/hours_block.py b/__unported__/analytic_hours_block/report/hours_block.py
deleted file mode 100644
index 02045eea..00000000
--- a/__unported__/analytic_hours_block/report/hours_block.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Vincent Renaville, ported by Joel Grand-Guillaume
-# Copyright 2010-2013 Camptocamp SA
-#
-# 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 .
-#
-##############################################################################
-
-import time
-from openerp.report import report_sxw
-from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
-
-
-class account_hours_block(report_sxw.rml_parse):
- def __init__(self, cr, uid, name, context=None):
- super(account_hours_block, self).__init__(cr, uid, name, context=context)
- self.localcontext.update({'time': time,
- 'date_format': DEFAULT_SERVER_DATE_FORMAT,
- 'analytic_lines': self._get_analytic_lines,
- })
- self.context = context
-
- def _get_analytic_lines(self, hours_block):
- al_pool = self.pool.get('account.analytic.line')
- aj_pool = self.pool.get('account.analytic.journal')
- tcj_ids = aj_pool.search(self.cr, self.uid,
- [('type', '=', 'general')])
- al_ids = al_pool.search(self.cr,
- self.uid,
- [('invoice_id', '=', hours_block.invoice_id.id),
- ('journal_id', 'in', tcj_ids),
- ],
- order='date desc',
- context=self.context)
- return al_pool.browse(self.cr, self.uid, al_ids, context=self.context)
-
-report_sxw.report_sxw('report.account.hours.block',
- 'account.hours.block',
- 'addons/analytic_hours_block/report/hours_block.rml',
- parser=account_hours_block)
diff --git a/__unported__/analytic_hours_block/report/hours_block.rml b/__unported__/analytic_hours_block/report/hours_block.rml
deleted file mode 100644
index 7f9344e4..00000000
--- a/__unported__/analytic_hours_block/report/hours_block.rml
+++ /dev/null
@@ -1,263 +0,0 @@
-
-
-
-
-
-
-
-
- [[ company.name ]]
- Maintenance And Support Summary
-
-
- [[ formatLang(time.strftime(date_format), date=True) ]]
- Page
-
-
- 0.6cm 27.9cm 20.3cm 27.9cm
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [[ repeatIn(objects,'o') ]]
- [[ setLang(o.partner_id.lang) ]]
- Maintenance And Support Summary
-
-
-
-
-
-
- Description:
-
-
- [[ o.name ]]
-
-
-
-
- Report Date:
-
-
- [[ formatLang(time.strftime(date_format), date=True) ]]
-
-
-
-
- Invoice Date:
-
-
- [[ o.date_invoice and formatLang(o.date_invoice, date=True) or '' ]]
-
-
-
-
- Amount bought: [[ (o.type == 'amount' or removeParentNode('para')) and '' ]]
- Quantity of hours bought: [[ (o.type == 'hours' or removeParentNode('para')) and '' ]]
-
-
- [[ o.amount_hours_block ]]
-
-
-
-
- Amount used: [[ (o.type == 'amount' or removeParentNode('para')) and '' ]]
- Quantity of hours used: [[ (o.type == 'hours' or removeParentNode('para')) and '' ]]
-
-
- [[ round(o.amount_hours_block_done, 2) ]]
-
-
-
-
- Remaining amount: [[ (o.type == 'amount' or removeParentNode('para')) and '' ]]
- Remaining hours: [[ (o.type == 'hours' or removeParentNode('para')) and '' ]]
-
-
-
- [[ o.amount_hours_block and round(o.amount_hours_block_delta, 2) or '' ]]
-
-
-
-
-
-
-
-
-
- Date
-
-
- Description
-
-
- Quantity
-
-
- Invoicing
-
-
- Deduced
-
-
-
-
- [[ repeatIn(analytic_lines(o), 'l') ]]
-
- [[ l.date if formatLang(l.date, date=True) else '' ]]
-
-
- [[ l.name or '' ]]
-
-
- [[ round(l.unit_amount, 2) or '0.0' ]]
-
-
- [[ l.to_invoice.customer_name ]]
-
-
- [[ round((l.unit_amount and l.to_invoice) and (l.unit_amount - (l.unit_amount * l.to_invoice.factor) / 100 ), 2) or '0.0' ]]
-
-
-
-
-
-
-
diff --git a/__unported__/analytic_hours_block/security/hours_block_security.xml b/__unported__/analytic_hours_block/security/hours_block_security.xml
deleted file mode 100644
index 81c50c4d..00000000
--- a/__unported__/analytic_hours_block/security/hours_block_security.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
- Hours Block multi company rule
-
-
- []
-
-
-
diff --git a/__unported__/analytic_hours_block/security/ir.model.access.csv b/__unported__/analytic_hours_block/security/ir.model.access.csv
deleted file mode 100644
index 57d8a5c9..00000000
--- a/__unported__/analytic_hours_block/security/ir.model.access.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_hours_block_user","account.hours.block","model_account_hours_block","base.group_user",1,0,0,0
-"access_hours_block_invoice_manager","account.hours.block","model_account_hours_block","account.group_account_invoice",1,1,1,1
diff --git a/__unported__/project_sla/__init__.py b/__unported__/project_sla/__init__.py
deleted file mode 100644
index 9ea8fe78..00000000
--- a/__unported__/project_sla/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# -*- coding: utf-8 -*-
-import project_sla
-import analytic_account
-import project_sla_control
-import project_issue
diff --git a/__unported__/project_sla/__openerp__.py b/__unported__/project_sla/__openerp__.py
deleted file mode 100644
index e0f981a9..00000000
--- a/__unported__/project_sla/__openerp__.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Copyright (C) 2013 Daniel Reis
-#
-# 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 .
-#
-##############################################################################
-{
- 'name': 'Service Level Agreements',
- 'summary': 'Define SLAs for your Contracts',
- 'version': '1.0',
- "category": "Project Management",
- 'description': """\
-Contract SLAs
-===============
-
-SLAs are assigned to Contracts, on the Analytic Account form, SLA Definition
-separator. This is also where new SLA Definitions are created.
-
-One Contract can have several SLA Definitions attached, allowing for
-"composite SLAs". For example, a contract could have a Response Time SLA (time
-to start resolution) and a Resolution Time SLA (time to close request).
-
-
-SLA Controlled Documents
-========================
-
-Only Project Issue documents are made SLA controllable.
-However, a framework is made available to easily build extensions to make
-other documents models SLA controlled.
-
-SLA controlled documents have attached information on the list of SLA rules
-they should meet (more than one in the case for composite SLAs) and a summary
-SLA status:
-
- * "watching" the service level (it has SLA requirements to meet)
- * under "warning" (limit dates are close, special attention is needed)
- * "failed" (one on the SLA limits has not been met)
- * "achieved" (all SLA limits have been met)
-
-Transient states, such as "watching" and "warning", are regularly updated by
-a hourly scheduled job, that reevaluates the warning and limit dates against
-the current time and changes the state when find dates that have been exceeded.
-
-To decide what SLA Definitions apply for a specific document, first a lookup
-is made for a ``analytic_account_id`` field. If not found, then it will
-look up for the ``project_id`` and it's corresponding ``analytic_account_id``.
-
-Specifically, the Service Desk module introduces a Analytic Account field for
-Project Issues. This makes it possible for a Service Team (a "Project") to
-have a generic SLA, but at the same time allow for some Contracts to have
-specific SLAs (such as the case for "premium" service conditions).
-
-
-SLA Definitions and Rules
-=========================
-
-New SLA Definitions are created from the Analytic Account form, SLA Definition
-field.
-
-Each definition can have one or more Rules.
-The particular rule to use is decided by conditions, so that you can set
-different service levels based on request attributes, such as Priority or
-Category.
-Each rule condition is evaluated in "sequence" order, and the first onea to met
-is the one to be used.
-In the simplest case, a single rule with no condition is just what is needed.
-
-Each rule sets a number of hours until the "limit date", and the number of
-hours until a "warning date". The former will be used to decide if the SLA
-was achieved, and the later can be used for automatic alarms or escalation
-procedures.
-
-Time will be counted from creation date, until the "Control Date" specified for
-the SLA Definition. That would usually be the "Close" (time until resolution)
-or the "Open" (time until response) dates.
-
-The working calendar set in the related Project definitions will be used (see
-the "Other Info" tab). If none is defined, a builtin "all days, 8-12 13-17"
-default calendar is used.
-
-A timezone and leave calendars will also used, based on either the assigned
-user (document's `user_id`) or on the current user.
-
-
-Setup checklist
-===============
-
-The basic steps to configure SLAs for a Project are:
-
- * Set Project's Working Calendar, at Project definitions, "Other Info" tab
- * Go to the Project's Analytic Account form; create and set SLA Definitions
- * Use the "Reapply SLAs" button on the Analytic Account form
- * See Project Issue's calculated SLAs in the new "Service Levels" tab
-
-
-Credits and Contributors
-========================
-
- * Daniel Reis (https://launchpad.net/~dreis-pt)
- * David Vignoni, author of the icon from the KDE 3.x Nuvola icon theme
-""",
- 'author': 'Daniel Reis',
- 'website': '',
- 'depends': [
- 'project_issue',
- ],
- 'data': [
- 'project_sla_view.xml',
- 'project_sla_control_view.xml',
- 'project_sla_control_data.xml',
- 'analytic_account_view.xml',
- 'project_view.xml',
- 'project_issue_view.xml',
- 'security/ir.model.access.csv',
- ],
- 'demo': ['project_sla_demo.xml'],
- 'test': ['test/project_sla.yml'],
- 'installable': False,
-}
diff --git a/__unported__/project_sla/analytic_account.py b/__unported__/project_sla/analytic_account.py
deleted file mode 100644
index fcfbb13f..00000000
--- a/__unported__/project_sla/analytic_account.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Copyright (C) 2013 Daniel Reis
-#
-# 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 .
-#
-##############################################################################
-
-from openerp.osv import fields, orm
-
-
-class AnalyticAccount(orm.Model):
- """ Add SLA to Analytic Accounts """
- _inherit = 'account.analytic.account'
- _columns = {
- 'sla_ids': fields.many2many(
- 'project.sla', string='Service Level Agreement'),
- }
-
- def _reapply_sla(self, cr, uid, ids, recalc_closed=False, context=None):
- """
- Force SLA recalculation on open documents that already are subject to
- this SLA Definition.
- To use after changing a Contract SLA or it's Definitions.
- The ``recalc_closed`` flag allows to also recompute closed documents.
- """
- ctrl_obj = self.pool.get('project.sla.control')
- proj_obj = self.pool.get('project.project')
- exclude_states = ['cancelled'] + (not recalc_closed and ['done'] or [])
- for contract in self.browse(cr, uid, ids, context=context):
- # for each contract, and for each model under SLA control ...
- for m_name in set([sla.control_model for sla in contract.sla_ids]):
- model = self.pool.get(m_name)
- doc_ids = []
- if 'analytic_account_id' in model._columns:
- doc_ids += model.search(
- cr, uid,
- [('analytic_account_id', '=', contract.id),
- ('state', 'not in', exclude_states)],
- context=context)
- if 'project_id' in model._columns:
- proj_ids = proj_obj.search(
- cr, uid, [('analytic_account_id', '=', contract.id)],
- context=context)
- doc_ids += model.search(
- cr, uid,
- [('project_id', 'in', proj_ids),
- ('state', 'not in', exclude_states)],
- context=context)
- if doc_ids:
- docs = model.browse(cr, uid, doc_ids, context=context)
- ctrl_obj.store_sla_control(cr, uid, docs, context=context)
- return True
-
- def reapply_sla(self, cr, uid, ids, context=None):
- """ Reapply SLAs button action """
- return self._reapply_sla(cr, uid, ids, context=context)
diff --git a/__unported__/project_sla/analytic_account_view.xml b/__unported__/project_sla/analytic_account_view.xml
deleted file mode 100644
index 5b74a43c..00000000
--- a/__unported__/project_sla/analytic_account_view.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
- view_account_analytic_account_form_sla
- account.analytic.account
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/__unported__/project_sla/i18n/project_sla.pot b/__unported__/project_sla/i18n/project_sla.pot
deleted file mode 100644
index 3f727476..00000000
--- a/__unported__/project_sla/i18n/project_sla.pot
+++ /dev/null
@@ -1,296 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * project_sla
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 7.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-12-19 10:28+0000\n"
-"PO-Revision-Date: 2013-12-19 10:28+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
-
-#. module: project_sla
-#: model:project.sla,name:project_sla.sla_response
-msgid "Standard Response Time"
-msgstr ""
-
-#. module: project_sla
-#: help:project.sla,control_field_id:0
-msgid "Date field used to check if the SLA was achieved."
-msgstr ""
-
-#. module: project_sla
-#: model:ir.model,name:project_sla.model_project_issue
-msgid "Project Issue"
-msgstr ""
-
-#. module: project_sla
-#: model:ir.model,name:project_sla.model_project_sla_control
-msgid "SLA Control Registry"
-msgstr ""
-
-#. module: project_sla
-#: view:project.sla:0
-msgid "Reapply SLA on Contracts"
-msgstr ""
-
-#. module: project_sla
-#: view:project.project:0
-msgid "Administration"
-msgstr ""
-
-#. module: project_sla
-#: view:project.issue:0
-msgid "Priority"
-msgstr ""
-
-#. module: project_sla
-#: selection:project.issue,sla_state:0
-#: selection:project.sla.control,sla_state:0
-#: selection:project.sla.controlled,sla_state:0
-msgid "Failed"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.control,sla_warn_date:0
-msgid "Warning Date"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.line,warn_qty:0
-msgid "Hours to Warn"
-msgstr ""
-
-#. module: project_sla
-#: view:project.sla.control:0
-msgid "Service Level"
-msgstr ""
-
-#. module: project_sla
-#: selection:project.issue,sla_state:0
-#: selection:project.sla.control,sla_state:0
-#: selection:project.sla.controlled,sla_state:0
-msgid "Watching"
-msgstr ""
-
-#. module: project_sla
-#: view:project.sla:0
-#: field:project.sla,analytic_ids:0
-msgid "Contracts"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla,name:0
-#: field:project.sla.line,name:0
-msgid "Title"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla,active:0
-msgid "Active"
-msgstr ""
-
-#. module: project_sla
-#: field:project.issue,sla_control_ids:0
-#: field:project.sla.controlled,sla_control_ids:0
-msgid "SLA Control"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.control,sla_achieved:0
-msgid "Achieved?"
-msgstr ""
-
-#. module: project_sla
-#: view:project.issue:0
-#: field:project.issue,sla_state:0
-#: field:project.sla.control,sla_state:0
-#: field:project.sla.controlled,sla_state:0
-msgid "SLA Status"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.line,condition:0
-msgid "Condition"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla,control_model:0
-msgid "For documents"
-msgstr ""
-
-#. module: project_sla
-#: view:project.sla:0
-#: field:project.sla.line,sla_id:0
-msgid "SLA Definition"
-msgstr ""
-
-#. module: project_sla
-#: model:project.sla.line,name:project_sla.sla_response_rule2
-msgid "Response in two business days"
-msgstr ""
-
-#. module: project_sla
-#: selection:project.issue,sla_state:0
-#: selection:project.sla.control,sla_state:0
-#: selection:project.sla.controlled,sla_state:0
-msgid "Will Fail"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.control,sla_line_id:0
-msgid "Service Agreement"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.control,doc_id:0
-msgid "Document ID"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.control,locked:0
-msgid "Recalculation disabled"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.control,sla_limit_date:0
-msgid "Limit Date"
-msgstr ""
-
-#. module: project_sla
-#: help:project.sla.line,condition:0
-msgid "Apply only if this expression is evaluated to True. The document fields can be accessed using either o, obj or object. Example: obj.priority <= '2'"
-msgstr ""
-
-#. module: project_sla
-#: model:project.sla.line,name:project_sla.sla_resolution_rule1
-msgid "Resolution in two business days"
-msgstr ""
-
-#. module: project_sla
-#: view:account.analytic.account:0
-msgid "Reapply"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.line,limit_qty:0
-msgid "Hours to Limit"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla,sla_line_ids:0
-#: view:project.sla.line:0
-msgid "Definitions"
-msgstr ""
-
-#. module: project_sla
-#: model:project.sla.line,name:project_sla.sla_resolution_rule2
-msgid "Resolution in three business days"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.control,sla_close_date:0
-msgid "Close Date"
-msgstr ""
-
-#. module: project_sla
-#: model:ir.model,name:project_sla.model_project_sla
-msgid "project.sla"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla,control_field_id:0
-msgid "Control Date"
-msgstr ""
-
-#. module: project_sla
-#: model:project.sla.line,name:project_sla.sla_response_rule1
-msgid "Response in one business day"
-msgstr ""
-
-#. module: project_sla
-#: selection:project.issue,sla_state:0
-#: selection:project.sla.control,sla_state:0
-#: selection:project.sla.controlled,sla_state:0
-msgid "Achieved"
-msgstr ""
-
-#. module: project_sla
-#: view:account.analytic.account:0
-#: field:account.analytic.account,sla_ids:0
-msgid "Service Level Agreement"
-msgstr ""
-
-#. module: project_sla
-#: model:project.sla,name:project_sla.sla_resolution
-msgid "Standard Resolution Time"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.line,sequence:0
-msgid "Sequence"
-msgstr ""
-
-#. module: project_sla
-#: view:project.issue:0
-msgid "Service Levels"
-msgstr ""
-
-#. module: project_sla
-#: model:ir.model,name:project_sla.model_account_analytic_account
-msgid "Analytic Account"
-msgstr ""
-
-#. module: project_sla
-#: view:project.sla:0
-msgid "Rules"
-msgstr ""
-
-#. module: project_sla
-#: help:project.sla.control,locked:0
-msgid "Safeguard manual changes from future automatic recomputations."
-msgstr ""
-
-#. module: project_sla
-#: selection:project.issue,sla_state:0
-#: selection:project.sla.control,sla_state:0
-#: selection:project.sla.controlled,sla_state:0
-msgid "Warning"
-msgstr ""
-
-#. module: project_sla
-#: view:project.issue:0
-msgid "Extra Info"
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.control,doc_model:0
-msgid "Document Model"
-msgstr ""
-
-#. module: project_sla
-#: model:ir.model,name:project_sla.model_project_sla_line
-msgid "project.sla.line"
-msgstr ""
-
-#. module: project_sla
-#: view:account.analytic.account:0
-msgid "Reapply the SLAs to all Contract's documents."
-msgstr ""
-
-#. module: project_sla
-#: field:project.sla.control,sla_start_date:0
-msgid "Start Date"
-msgstr ""
-
-#. module: project_sla
-#: model:ir.model,name:project_sla.model_project_sla_controlled
-msgid "SLA Controlled Document"
-msgstr ""
-
diff --git a/__unported__/project_sla/images/10_sla_contract.png b/__unported__/project_sla/images/10_sla_contract.png
deleted file mode 100644
index e46f8b5578f9e35a9fcdff3875591d483eaec7ee..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 18059
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 0RPO
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