← Back to team overview

savoirfairelinux-openerp team mailing list archive

[Merge] lp:~serpentcs/openerp-isp/serpentcs_openerp-isp_7.0 into lp:openerp-isp

 

Nishant Jogi has proposed merging lp:~serpentcs/openerp-isp/serpentcs_openerp-isp_7.0 into lp:openerp-isp.

Requested reviews:
  Savoir-faire Linux' OpenERP (savoirfairelinux-openerp)

For more details, see:
https://code.launchpad.net/~serpentcs/openerp-isp/serpentcs_openerp-isp_7.0/+merge/190563
-- 
https://code.launchpad.net/~serpentcs/openerp-isp/serpentcs_openerp-isp_7.0/+merge/190563
Your team Savoir-faire Linux' OpenERP is requested to review the proposed merge of lp:~serpentcs/openerp-isp/serpentcs_openerp-isp_7.0 into lp:openerp-isp.
=== modified file 'contract_isp/__init__.py'
--- contract_isp/__init__.py	2013-09-16 17:59:01 +0000
+++ contract_isp/__init__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -20,6 +20,9 @@
 #
 ##############################################################################
 
+#from . import *
+#import report
 import contract
-import report
 import wizard
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp/__openerp__.py'
--- contract_isp/__openerp__.py	2013-09-16 21:15:46 +0000
+++ contract_isp/__openerp__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -19,7 +19,6 @@
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
-
 {
     'name': 'Contract ISP',
     'version': '1.0',
@@ -28,25 +27,26 @@
 Manage service based contracts
 ==============================
 
-This module adds a service based contract category were you can manage diferent services and service types that are included in the contract.
+This module adds a service based contract category were you can manage different services and service types that are included in the contract.
 
 Features:
 ---------
 
-* Differents types of services (recurrent, exceptions, one time only),
+* Different types of services (recurrent, exceptions, one time only),
 * Pro-rata logic,
 * Service activation wizard.
 """,
-    'author': 'Savoir-faire Linux Inc',
+    'author': 'Savoirfaire-Linux Inc',
     'website': 'www.savoirfairelinux.com',
     'license': 'AGPL-3',
-    'depends': ['account_analytic_analysis'],
+    'depends': ['base','account_analytic_analysis'],
     'data': ['security/contract_isp_security.xml',
              'security/ir.model.access.csv',
              'wizard/activate_contract_service.xml',
              'contract_isp_view.xml',
              'contract_isp_data.xml',
              'contract_isp_workflow.xml'],
-    'active': False,
+    'auto_install': False,
     'installable': True,
 }
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp/contract.py'
--- contract_isp/contract.py	2013-10-07 12:07:29 +0000
+++ contract_isp/contract.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<http://www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -23,13 +23,16 @@
 import logging
 import calendar
 import datetime
+<<<<<<< TREE
 import openerp.addons.decimal_precision as dp
 from openerp.osv import orm, fields
+=======
+from openerp.osv import osv, fields
+>>>>>>> MERGE-SOURCE
 from openerp.report import report_sxw
 from openerp.tools import convert
 from openerp.tools.translate import _
 
-
 def add_months(sourcedate, months):
     month = sourcedate.month - 1 + months
     year = sourcedate.year + month / 12
@@ -40,40 +43,36 @@
 
 def date_interval(start_date, month_end=True, date_format='%m/%d/%Y'):
     if month_end:
-        end_date = datetime.date(start_date.year,
-                                 start_date.month,
-                                 calendar.monthrange(start_date.year,
-                                                     start_date.month)[1])
+        end_date = datetime.date(start_date.year,start_date.month,calendar.monthrange(start_date.year,start_date.month)[1])
     else:
         end_date = add_months(start_date, 1) - datetime.timedelta(days=1)
-
-    interval = '(%s - %s)' % (start_date.strftime(date_format),
-                              end_date.strftime(date_format))
-
+    interval = '(%s - %s)' % (start_date.strftime(date_format),end_date.strftime(date_format))
     return interval
 
-
-class res_company(orm.Model):
+class res_company(osv.Model):
     _inherit = 'res.company'
 
     def _days(self, cr, uid, context=None):
         return tuple([(str(x), str(x)) for x in range(1, 29)])
 
     _columns = {
+<<<<<<< TREE
         'parent_account_id': fields.many2one('account.analytic.account',
                                              'Parent Analytic Account'),
         'cutoff_day': fields.selection(_days, 'Cutoff day'),
         'default_journal_id': fields.many2one('account.analytic.journal',
                                               'Default Journal')
+=======
+        'parent_account_id': fields.many2one('account.analytic.account','Parent Analytic Account'),
+        'cutoff_day': fields.selection(_days, 'Cutoff day')
+>>>>>>> MERGE-SOURCE
     }
 
-
-class res_partner(orm.Model):
+class res_partner(osv.Model):
     _inherit = 'res.partner'
 
     _columns = {
-        'partner_analytic_account_id': fields.many2one('account.analytic.account',
-                                                       'Partner Analytic Account')
+        'partner_analytic_account_id': fields.many2one('account.analytic.account','Partner Analytic Account')
     }
 
     def create(self, cr, uid, values, context=None):
@@ -81,7 +80,6 @@
         company_obj = self.pool.get('res.company')
         company_id = company_obj._company_default_get(cr, uid, context)
         company = company_obj.browse(cr, uid, company_id, context)
-
         ret = super(res_partner, self).create(cr, uid, values, context)
 
         parent_id = company.parent_account_id and company.parent_account_id.id
@@ -92,28 +90,19 @@
             'partner_id': ret,
             'user_id': uid
         }
-
         account_id = account_analytic_account.create(cr, uid, account, context)
-        self.write(cr, uid, ret,
-                   {'partner_analytic_account_id': account_id},
-                   context)
-
+        self.write(cr, uid, ret,{'partner_analytic_account_id': account_id},context)
         return ret
 
-
-class product_product(orm.Model):
+class product_product(osv.Model):
     _inherit = 'product.product'
 
     _columns = {
-        'analytic_line_type': fields.selection((('r', 'Recurrent'),
-                                                ('x', 'Exception'),
-                                                ('o', 'One time')),
-                                               'Type in contract'),
+        'analytic_line_type': fields.selection((('r', 'Recurrent'),('x', 'Exception'),('o', 'One time')),'Type in contract'),
         'require_activation': fields.boolean('Require activation')
     }
 
-
-class contract_service(orm.Model):
+class contract_service(osv.Model):
     _name = 'contract.service'
 
     def _get_product_price(self, cr, uid, ids, field_name, arg, context=None):
@@ -135,12 +124,12 @@
                     context=context)[pricelist_id]
             else:
                 ret[line.id] = None
-
         return ret
 
     _columns = {
         'activation_date': fields.datetime('Activation date'),
         'duration': fields.integer('Duration'),
+<<<<<<< TREE
         'product_id': fields.many2one('product.product',
                                       'Product',
                                       required=True),
@@ -150,8 +139,13 @@
                                                 ('x', 'Exception'),
                                                 ('o', 'One time')),
                                                'Type'),
+=======
+        'product_id': fields.many2one('product.product','Product',required=True),
+        'analytic_line_type': fields.selection((('r', 'Recurrent'),('x', 'Exception'),('o', 'One time')),'Type'),
+>>>>>>> MERGE-SOURCE
         'require_activation': fields.boolean('Require activation'),
         'account_id': fields.many2one('account.analytic.account', 'Contract'),
+<<<<<<< TREE
         'price': fields.function(
             _get_product_price, type='float',
             digits_compute=dp.get_precision('Product Price'),
@@ -162,6 +156,11 @@
                                    ('active', 'Active'),
                                    ('inactive', 'Inactive')),
                                   'State')
+=======
+        'price': fields.function(_get_product_price, type='float',string='Price'),
+        'activation_line_generated': fields.boolean('Activation Line Generated?'),
+        'state': fields.selection((('draft', 'Waiting for activating'),('active', 'Active'),('inactive', 'Inactive')),'State')
+>>>>>>> MERGE-SOURCE
     }
 
     _defaults = {
@@ -173,11 +172,7 @@
 
     def on_change_product_id(self, cr, uid, ids, product_id):
         ret = {'value': {'analytic_line_type': None}}
-        product = self.pool.get('product.product').browse(
-            cr, uid,
-            [product_id],
-            None)[0]
-
+        product = self.pool.get('product.product').browse(cr, uid,[product_id],None)[0]
         if product_id:
             ret['value']['analytic_line_type'] = product.analytic_line_type
             ret['value']['require_activation'] = product.require_activation
@@ -187,27 +182,23 @@
                 ret['value']['duration'] = 0
             else:
                 ret['value']['duration'] = 1
-
         return ret
 
-    def create_analytic_line(self, cr, uid, ids,
-                             mode='manual',
-                             date=None,
-                             context=None):
-
+    def create_analytic_line(self, cr, uid, ids,mode='manual',date=None,context=None):
         if not date:
             date = datetime.date.today()
-
         if type(ids) is int:
             ids = [ids]
-
         ret = []
         record = {}
+<<<<<<< TREE
 
         company_obj = self.pool.get('res.company')
         company_id = company_obj._company_default_get(cr, uid, context)
         company = company_obj.browse(cr, uid, company_id, context)
 
+=======
+>>>>>>> MERGE-SOURCE
         account_analytic_line_obj = self.pool.get('account.analytic.line')
         for line in self.browse(cr, uid, ids, context):
             account_id = line.account_id.id
@@ -219,38 +210,29 @@
             ]
             lang_id = res_lang_obj.search(cr, uid, query, context=context)
             if lang_id:
-                date_format = res_lang_obj.browse(cr, uid,
-                                                  lang_id[0],
-                                                  context=context).date_format
-
+                date_format = res_lang_obj.browse(cr, uid,lang_id[0],context=context).date_format
             else:
                 date_format = '%Y/%m/%d'
-
             if line.analytic_line_type == 'r':
                 if mode == 'prorata':
                     activation_date = date
-
-                    month_days = calendar.monthrange(activation_date.year,
-                                                     activation_date.month)[1]
-
+                    month_days = calendar.monthrange(activation_date.year,activation_date.month)[1]
                     used_days = month_days - activation_date.day
                     ptx = (100 * used_days / month_days) / 100.0
-
                     amount = line.product_id.list_price * ptx
+<<<<<<< TREE
                     interval = date_interval(add_months(date, 1),
                                              True,
                                              date_format)
 
+=======
+                    interval = date_interval(add_months(date, 1),True,date_format)
+>>>>>>> MERGE-SOURCE
                 elif mode == 'cron':
                     amount = line.product_id.list_price
                     next_month = add_months(date, 1)
-                    next_month = datetime.date(
-                        next_month.year,
-                        next_month.month,
-                        1)
-                    interval = date_interval(next_month,
-                                             False,
-                                             date_format)
+                    next_month = datetime.date(next_month.year,next_month.month,1)
+                    interval = date_interval(next_month,False,date_format)
                     date = next_month
 
                 elif mode == 'manual':
@@ -264,9 +246,7 @@
             else:
                 interval = ''
                 amount = line.product_id.list_price
-
-            general_account_id = line.product_id.property_account_expense.id \
-                or line.product_id.categ_id.property_account_expense_categ.id
+            general_account_id = line.product_id.property_account_expense.id or line.product_id.categ_id.property_account_expense_categ.id
 
             record = {
                 'name': ' '.join([line.product_id.name, line.name, interval]),
@@ -288,12 +268,16 @@
                 if line.duration <= 0:
                     line.unlink()
                     record['contract_service_id'] = False
+<<<<<<< TREE
 
             if 'default_type' in context:
                 context.pop('default_type')
 
             ret.append(account_analytic_line_obj.create(cr, uid, record,
                                                         context))
+=======
+            ret.append(account_analytic_line_obj.create(cr, uid, record,context))
+>>>>>>> MERGE-SOURCE
         return ret
 
     def create(self, cr, uid, values, context=None):
@@ -301,32 +285,19 @@
             values["state"] = 'active'
             values["activation_date"] = fields.datetime.now()
         ret = super(contract_service, self).create(cr, uid, values, context)
-
         return ret
 
     def action_desactivate(self, cr, uid, ids, context):
-        return self.write(cr, uid, ids,
-                          {'state': 'inactive', 'activation_date': None},
-                          context)
-
-
-class account_analytic_account(orm.Model):
+        return self.write(cr, uid, ids,{'state': 'inactive', 'activation_date': None},context)
+
+class account_analytic_account(osv.Model):
     _name = "account.analytic.account"
     _inherit = "account.analytic.account"
 
     _columns = {
-        'contract_service_ids': fields.one2many('contract.service',
-                                                'account_id',
-                                                'Services'),
+        'contract_service_ids': fields.one2many('contract.service','account_id','Services'),
         'use_contract_services': fields.boolean('Contract services'),
-        'state': fields.selection([('template', 'Template'),
-                                   ('draft', 'New'),
-                                   ('open', 'In Progress'),
-                                   ('pending', 'Suspended'),
-                                   ('close', 'Closed'),
-                                   ('cancelled', 'Cancelled')],
-                                  'Status', required=True,
-                                  track_visibility='onchange'),
+        'state': fields.selection([('template', 'Template'),('draft', 'New'),('open', 'In Progress'),('pending', 'Suspended'),('close', 'Closed'),('cancelled', 'Cancelled')],'Status', required=True,track_visibility='onchange'),
     }
 
     _defaults = {
@@ -337,7 +308,6 @@
         mode = 'manual'
         if context and context.get('create_analytic_line_mode', False):
             mode = context.get('create_analytic_line_mode')
-
         account_analytic_line_obj = self.pool.get('account.analytic.line')
         contract_service_obj = self.pool.get('contract.service')
         query = [
@@ -345,40 +315,23 @@
             ('state', '=', 'active'),
             ('analytic_line_type', 'in', ('r', 'x'))
         ]
-        contract_service_ids = contract_service_obj.search(cr, uid,
-                                                           query,
-                                                           order='account_id',
-                                                           context=context)
-
+        contract_service_ids = contract_service_obj.search(cr, uid,query,order='account_id',context=context)
         if contract_service_ids:
-            contract_service_obj.create_analytic_line(cr, uid,
-                                                      contract_service_ids,
-                                                      mode=mode,
-                                                      context=context)
-
+            contract_service_obj.create_analytic_line(cr, uid,contract_service_ids,mode=mode,context=context)
         return {}
 
     def create(self, cr, uid, values, context=None):
         if values['type'] == 'contract' and values['use_contract_services']:
             values['name'] = values['code']
             partner_obj = self.pool.get('res.partner')
-            values['parent_id'] = partner_obj.read(
-                cr, uid, values['partner_id'],
-                fields=['partner_analytic_account_id'],
-                context=context)['partner_analytic_account_id'][0]
-
-        ret = super(account_analytic_account, self).create(cr, uid, values,
-                                                           context)
-
+            values['parent_id'] = partner_obj.read(cr, uid, values['partner_id'],fields=['partner_analytic_account_id'],context=context)['partner_analytic_account_id'][0]
+        ret = super(account_analytic_account, self).create(cr, uid, values,context)
         return ret
 
-    def on_change_partner_id(self, cr, uid, ids,
-                             partner_id, name,
-                             code=None, context=None):
+    def on_change_partner_id(self, cr, uid, ids,partner_id, name,code=None, context=None):
         res = {}
         if partner_id:
-            partner = self.pool.get('res.partner').browse(cr, uid, partner_id,
-                                                          context=context)
+            partner = self.pool.get('res.partner').browse(cr, uid, partner_id,context=context)
             if partner.user_id:
                 res['manager_id'] = partner.user_id.id
             if not name:
@@ -388,20 +341,18 @@
                     res['name'] = _('Contract: ') + partner.name
             # Use pricelist from customer
             res['pricelist_id'] = partner.property_product_pricelist.id
-
         return {'value': res}
 
-
-class account_analytic_line(orm.Model):
+class account_analytic_line(osv.Model):
     _name = "account.analytic.line"
     _inherit = "account.analytic.line"
 
     _columns = {
-        'contract_service_id': fields.many2one('contract.service',
-                                               'Service'),
+        'contract_service_id': fields.many2one('contract.service','Service'),
         'is_prorata': fields.boolean('Prorata')
     }
 
     _defaults = {
         'is_prorata': False
     }
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp/contract_isp_view.xml'
--- contract_isp/contract_isp_view.xml	2013-10-04 19:57:55 +0000
+++ contract_isp/contract_isp_view.xml	2013-10-11 09:17:58 +0000
@@ -1,36 +1,37 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <openerp>
     <data>
-	<record id="view_company_contract_isp_form" model="ir.ui.view">
+   
+    <record id="view_company_contract_isp_form" model="ir.ui.view">
             <field name="name">contract.isp.res.company.form</field>
             <field name="model">res.company</field>
-	    <field name="inherit_id" ref="base.view_company_form"/>
+            <field name="inherit_id" ref="base.view_company_form"/>
             <field name="arch" type="xml">
-		<xpath expr="//page[@string='Configuration']" position="after">
-		    <page string="ISP Contract Management">
-			<group>
-			    <group>
-				<field name="parent_account_id" />
-			    </group>
-
-			    <group>
-				<field name="cutoff_day" />
-			    </group>
-			</group>
-		    </page>
-		</xpath>
-	    </field>
-	</record>
-
-	<record id="view_contract_isp_form" model="ir.ui.view">
+                <xpath expr="//page[@string='Configuration']" position="after">
+                <page string="ISP Contract Management">
+                <group>
+                    <group>
+                        <field name="parent_account_id" />
+                    </group>
+                    <group>
+                        <field name="cutoff_day" />
+                    </group>
+                </group>
+                </page>
+                </xpath>
+            </field>
+    </record>
+
+    <record id="view_contract_isp_form" model="ir.ui.view">
             <field name="name">contract.isp.form</field>
             <field name="model">account.analytic.account</field>
-	    <field name="inherit_id" ref="account_analytic_analysis.account_analytic_account_form_form"/>
+            <field name="inherit_id" ref="account_analytic_analysis.account_analytic_account_form_form"/>
             <field name="arch" type="xml">
                 <xpath expr='//div[@name="project"]' position='inside'>
                     <field name="use_contract_services" />
                     <label for="use_contract_services" />
                 </xpath>
+<<<<<<< TREE
 
 		<xpath expr="//separator[@string='Invoicing']" position="before">
 		    <separator 
@@ -84,24 +85,49 @@
 	</record>
 
 	<record id="view_contract_service_form" model="ir.ui.view">
+=======
+                <xpath expr="//separator[@string='Invoicing']" position="before">
+                    <separator name="services" string="Services" attrs="{'invisible': [('use_contract_services', '=', False)]}"/>
+                    <field name="contract_service_ids" mode="tree" select="1" options="{'always_reload': True, 'reload_on_button': True}" attrs="{'invisible': [('use_contract_services', '=', False)]}">
+                        <tree editable="botton" colors="green:state=='active'" >
+                            <field name="account_id" invisible="1"/>
+                            <field name="state" readonly="True" />
+                            <field name="activation_date" attrs="{'readonly': [('state', 'in', ('draft', 'active'))]}" />
+                            <field name="product_id" on_change="on_change_product_id(product_id)" domain="[('analytic_line_type', 'in', ('r', 'x', 'o'))]" attrs="{'readonly': [('state', '=', 'active')]}"/>
+                            <field name="price" readonly="1" sum="Total Price" />
+                            <field name="analytic_line_type" />
+                            <field name="require_activation" invisible="True" />
+                            <field name="duration" attrs="{'readonly': [('state', 'in', ('draft', 'active')),('analytic_line_type', 'in', ('r', 'o'))],'required': [('analytic_line_type', '=', 'x')]}" />
+                            <field name="account_id" invisible="True" />
+                            <button name="%(action_view_contract_service_activate)d" string="Activate" type="action" states="draft,inactive" icon="gtk-yes" groups="contract_isp.group_isp_agent"/>
+                            <button name="action_desactivate" string="Desactivate" type="object" states="active" icon="gtk-no" groups="contract_isp.group_isp_agent"/>
+                        </tree>
+                    </field>
+                </xpath>
+        </field>
+    </record>
+
+    <record id="view_contract_service_form" model="ir.ui.view">
+>>>>>>> MERGE-SOURCE
             <field name="name">contract.service.form</field>
             <field name="model">contract.service</field>
             <field name="arch" type="xml">
-		<form string="Contract Services" version="7.0">
-		    <sheet string="Analytic Account">
-			<field name="activation_date" />
-			<field name="analytic_line_type" />
-			<field name="duration" />
-			<field name="product_id" />
-		    </sheet>
-		</form>
-	    </field>
-	</record>
+            <form string="Contract Services" version="7.0">
+                <sheet string="Analytic Account">
+                    <field name="activation_date" />
+                    <field name="analytic_line_type" />
+                    <field name="duration" />
+                    <field name="product_id" />
+                </sheet>
+            </form>
+            </field>
+    </record>
 
-	<record id="view_contract_service_tree" model="ir.ui.view">
+    <record id="view_contract_service_tree" model="ir.ui.view">
             <field name="name">contract.service.tree</field>
             <field name="model">contract.service</field>
             <field name="arch" type="xml">
+<<<<<<< TREE
 		<tree editable="top" string="Contract Services">
 		    <field name="account_id" invisible="1"/>
 		    <field name="state" readonly="True" />
@@ -157,16 +183,52 @@
 	    </field>
 	</record>
 
+=======
+                <tree editable="top" string="Contract Services">
+                   <field name="account_id" invisible="1"/>
+                   <field name="state" readonly="True" /> 
+                   <field name="activation_date" attrs="{'readonly': [('state', 'in', ('draft', 'active'))]}" />
+                   <field name="product_id" on_change="on_change_product_id(product_id)" domain="[('analytic_line_type', 'in', ('r', 'x', 'o'))]" />
+                   <field name="analytic_line_type" />
+                   <field name="duration" attrs="{'readonly': [('state', 'in', ('draft', 'active')), ('analytic_line_type', 'in', ('r', 'o'))]}" />
+                   <field name="account_id" invisible="True" />
+                   <button name="%(action_view_contract_service_activate)d" string="Activate" type="action" icon="gtk-yes" states="draft" groups="contract_isp.group_isp_agent" />
+                   <button name="action_desactivate" string="Desactivate" icon="gtk-no" states="active" type="object" groups="contract_isp.group_isp_agent" />
+                </tree>
+            </field>
+    </record>
+
+    <record id="view_contract_isp__product_form" model="ir.ui.view">
+        <field name="name">contract.isp.product.form</field>
+        <field name="model">product.product</field>
+        <field name="inherit_id" ref="product.product_normal_form_view"/>
+        <field name="arch" type="xml">
+            <field name="list_price" position="after">
+                <field name="analytic_line_type" />
+                <field name="require_activation" />
+            </field>
+        </field>
+    </record>
+
+    <record id="contract_isp_form_suspend" model="ir.ui.view">
+        <field name="name">contract.isp.form.suspend</field>
+        <field name="model">account.analytic.account</field>
+        <field name="inherit_id" ref="hr_timesheet_invoice.account_analytic_account_form_form"/>
+        <field name="arch" type="xml">
+            <xpath expr="//header/button[@name='set_pending']" position='attributes'>
+                <attribute name="string">Suspend</attribute>
+            </xpath>
+        </field>
+    </record>
+>>>>>>> MERGE-SOURCE
 
         <act_window
             id="action_contract_service_manage"
             name="Services"
             res_model="contract.service"
             src_model="account.analytic.account"
-            view_type="tree"
+            view_type="form"
             view_mode="tree" />
-
-
     </data>
 </openerp>
 

=== modified file 'contract_isp/contract_isp_workflow.xml'
--- contract_isp/contract_isp_workflow.xml	2013-09-16 17:59:01 +0000
+++ contract_isp/contract_isp_workflow.xml	2013-10-11 09:17:58 +0000
@@ -14,7 +14,7 @@
             <field name="wkf_id" ref="wkf_contract_service"/>
             <field name="name">draft</field>
             <field name="kind">function</field>
-	    <field name="flow_start">True</field>
+            <field name="flow_start">True</field>
         </record>
         <record id="act_active" model="workflow.activity">
             <field name="wkf_id" ref="wkf_contract_service"/>

=== modified file 'contract_isp/security/contract_isp_security.xml'
--- contract_isp/security/contract_isp_security.xml	2013-09-26 15:56:44 +0000
+++ contract_isp/security/contract_isp_security.xml	2013-10-11 09:17:58 +0000
@@ -1,14 +1,15 @@
 <?xml version="1.0" encoding="utf-8"?>
 <openerp>
     <data>
-	<!-- Data goes here -->
+    <!-- Data goes here -->
         <record id="group_isp_agent" model="res.groups">
             <field name="name">Agent Level 1</field>
             <field name="category_id" ref="base.module_category_customer_relationship_management" />
             <field name="users" eval="[(4, ref('base.user_root'))]" />
-	    <field name="implied_ids" eval="None" />
+            <field name="implied_ids" eval="None" />
             <field name="comment">The users in this group will be able to manage customers and contracts</field>
         </record>
+<<<<<<< TREE
 
         <record id="group_isp_agent2" model="res.groups">
             <field name="name">Agent Level 2</field>
@@ -18,5 +19,7 @@
             <field name="comment">The users in this group will be able to manage customers and contracts</field>
         </record>
 
+=======
+>>>>>>> MERGE-SOURCE
     </data>
 </openerp>

=== modified file 'contract_isp/wizard/__init__.py'
--- contract_isp/wizard/__init__.py	2013-09-16 17:59:01 +0000
+++ contract_isp/wizard/__init__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -20,4 +20,6 @@
 #
 ##############################################################################
 
-import activate_contract_service
+from . import activate_contract_service
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp/wizard/activate_contract_service.py'
--- contract_isp/wizard/activate_contract_service.py	2013-09-16 17:59:01 +0000
+++ contract_isp/wizard/activate_contract_service.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -21,28 +21,23 @@
 ##############################################################################
 
 import datetime
-from openerp.osv import orm, fields
+from openerp.osv import osv, fields
 from openerp.addons.contract_isp.contract import add_months
 
-
-class contract_service_activate(orm.TransientModel):
+class contract_service_activate(osv.TransientModel):
     _name = 'contract.service.activate'
 
     def _get_account_id(self, cr, uid, context=None):
         if context.get('active_model', '') == 'contract.service':
             contract_id = context.get('active_id')
-            contract_service = self.pool.get('contract.service').browse(
-                cr, uid, contract_id, context)
-
+            contract_service = self.pool.get('contract.service').browse(cr, uid, contract_id, context)
             return contract_service.account_id.id
         return None
 
     def _get_service_id(self, cr, uid, context=None):
         if context.get('active_model', '') == 'contract.service':
             service_id = context.get('active_id')
-            contract_service = self.pool.get('contract.service').browse(
-                cr, uid, service_id, context)
-
+            contract_service = self.pool.get('contract.service').browse(cr, uid, service_id, context)
             return contract_service.id
         return None
 
@@ -64,56 +59,30 @@
         company_id = company_obj._company_default_get(cr, uid, context)
         cutoff = company_obj.read(cr, uid, company_id, 'cutoff_day', context)
         contract_service_obj = self.pool.get('contract.service')
-        contract_service = contract_service_obj.browse(
-            cr, uid, wizard.service_id.id, context)
+        contract_service = contract_service_obj.browse(cr, uid, wizard.service_id.id, context)
 
         activation_date = datetime.date(
             int(wizard.activation_date[:4]),
             int(wizard.activation_date[5:7]),
             int(wizard.activation_date[8:10]))
-
-        cuttoff_day = company_obj.read(
-            cr, uid,
-            company_id,
-            fields=['cutoff_day'],
-            context=context)['cutoff_day']
-
-        invoice_day = company_obj.read(
-            cr, uid,
-            company_id,
-            fields=['invoice_day'],
-            context=context)['invoice_day']
-
-        cutoff_date = datetime.date(
-            datetime.date.today().year,
-            datetime.date.today().month,
-            int(cuttoff_day))
-
-        invoice_date = datetime.date(
-            datetime.date.today().year,
-            datetime.date.today().month,
-            int(invoice_day))
-
-        contract_service.write({
-            'activation_date': wizard.activation_date,
-            'state': 'active'
-        })
-
+        cuttoff_day = company_obj.read(cr, uid,company_id,fields=['cutoff_day'],context=context)['cutoff_day'] or 0
+        invoice_day = company_obj.read(cr, uid,company_id,fields=['invoice_day'],context=context)['invoice_day'] or 0
+        year = datetime.date.today().year
+        month = datetime.date.today().month
+        cutoff_date = datetime.date(year,month,int(cuttoff_day))
+        invoice_date = datetime.date(year,month,int(invoice_day))
+        contract_service.write({'activation_date': wizard.activation_date,'state': 'active'})
         query = [
             ('account_id', '=', wizard.account_id.id),
             ('state', '=', 'draft')
         ]
-        draft_line_ids = contract_service_obj.search(cr, uid, query,
-                                                     context=context)
+        draft_line_ids = contract_service_obj.search(cr, uid, query,context=context)
 
         if not draft_line_ids:
             for line in wizard.account_id.contract_service_ids:
                 if line.activation_line_generated is False:
-                    line.create_analytic_line(mode='manual',
-                                              date=activation_date)
-
+                    line.create_analytic_line(mode='manual',date=activation_date)
                     if line.analytic_line_type == 'r':
-                        line.create_analytic_line(mode='prorata',
-                                                  date=activation_date)
-
+                        line.create_analytic_line(mode='prorata',date=activation_date)
         return True
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp/wizard/activate_contract_service.xml'
--- contract_isp/wizard/activate_contract_service.xml	2013-09-16 17:59:01 +0000
+++ contract_isp/wizard/activate_contract_service.xml	2013-10-11 09:17:58 +0000
@@ -6,35 +6,25 @@
             <field name="model">contract.service.activate</field>
             <field name="arch" type="xml">
                 <form string="Activate Service" version="7.0">
-		    <group>
-			<field name="activation_date" />
-			<field name="account_id" invisible="1" />
-			<field name="service_id" invisible="1" />
-		    </group>
-		    <footer>
-			<button 
-			    name="activate"
-			    string="Activate"
-			    type="object"
-			    class="oe_highlight" />
-			<button
-			    string="Cancel"
-			    class="oe_link"
-			    special="cancel" />
-		    </footer>
-		</form>
-	    </field>
-	</record>
-        <record id="action_view_contract_service_activate" model="ir.actions.act_window">
-            <field name="name">Activate Service</field>
-            <field name="type">ir.actions.act_window</field>
-	    <field name="src_model">contract.service</field>
-            <field name="res_model">contract.service.activate</field>
-            <field name="view_type">form</field>
-            <field name="view_mode">form</field>
-	    <field name="context">{'default_service_id': active_id}</field>
-            <field name="target">new</field>
+                    <header>
+                        <button name="activate" string="Activate" type="object" class="oe_highlight" />
+                        <button string="Cancel" class="oe_link" special="cancel" />
+                    </header>
+                    <group>
+                        <field name="activation_date" />
+                        <field name="account_id" invisible="1" />
+                        <field name="service_id" invisible="1" />
+                    </group>
+                    
+                </form>
+            </field>
         </record>
-
+        
+        <act_window id="action_view_contract_service_activate"
+            key2="client_action_multi" name="Activate Service"
+            res_model="contract.service.activate" src_model="contract.service"
+            view_mode="form" target="new" view_type="form" 
+            context="{'default_service_id': active_id}"/>
+        
     </data>
 </openerp>

=== modified file 'contract_isp_automatic_invoicing/__init__.py'
--- contract_isp_automatic_invoicing/__init__.py	2013-09-16 17:59:01 +0000
+++ contract_isp_automatic_invoicing/__init__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -19,4 +19,6 @@
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
-import contract
+from . import contract
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_automatic_invoicing/__openerp__.py'
--- contract_isp_automatic_invoicing/__openerp__.py	2013-09-16 17:59:01 +0000
+++ contract_isp_automatic_invoicing/__openerp__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -25,11 +25,12 @@
     'version': '1.0',
     'category': 'Account',
     'description': """A module to automatically invoice services based contracts""",
-    'author': 'Savoir-faire Linux Inc.',
+    'author': 'Savoirfaire-Linux Inc',
     'website': 'www.savoirfairelinux.com',
     'license': 'AGPL-3',
     'depends': ['contract_isp_invoice'],
     'data': ['contract_isp_automatic_invoicing_data.xml'],
-    'active': False,
+    'auto_install': False,
     'installable': True,
 }
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_automatic_invoicing/contract.py'
--- contract_isp_automatic_invoicing/contract.py	2013-09-16 17:59:01 +0000
+++ contract_isp_automatic_invoicing/contract.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<http://www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -19,28 +19,23 @@
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
-from openerp.osv import orm, fields
-
-
-class account_analytic_account(orm.Model):
+from openerp.osv import osv, fields
+
+class account_analytic_account(osv.Model):
     _inherit = 'account.analytic.account'
 
-    def cron_contract_automatic_invoicing(self, cr, uid, ids=None,
-                                          context=None):
+    def cron_contract_automatic_invoicing(self, cr, uid, ids=None,context=None):
         if context is None:
             context = {}
-
         if not context.get('create_analytic_line_mode', False):
             context['create_analytic_line_mode'] = 'cron'
-
         query = [
             ('state', '=', 'open'),
             ('type', '=', 'contract')
         ]
-
         ids_to_invoice = self.search(cr, uid, query, context=context)
-
         for contract_id in ids_to_invoice:
             self.create_analytic_lines(cr, uid, [contract_id], context=context)
             self.create_invoice(cr, uid, contract_id, context=context)
-            
\ No newline at end of file
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_automatic_invoicing/contract_isp_automatic_invoicing_data.xml'
--- contract_isp_automatic_invoicing/contract_isp_automatic_invoicing_data.xml	2013-09-16 17:59:01 +0000
+++ contract_isp_automatic_invoicing/contract_isp_automatic_invoicing_data.xml	2013-10-11 09:17:58 +0000
@@ -6,7 +6,7 @@
             <field name="interval_number">1</field>
             <field name="interval_type">months</field>
             <field name="numbercall">-1</field>
-	    <field name="active" eval="False" />
+            <field name="active" eval="False" />
             <field name="doall" eval="False"/>
             <field name="model" eval="'account.analytic.account'"/>
             <field name="function" eval="'cron_contract_automatic_invoicing'"/>

=== modified file 'contract_isp_invoice/__init__.py'
--- contract_isp_invoice/__init__.py	2013-09-16 17:59:01 +0000
+++ contract_isp_invoice/__init__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -20,5 +20,7 @@
 #
 ##############################################################################
 
-import contract
-import wizard
+from . import contract
+from . import wizard
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_invoice/__openerp__.py'
--- contract_isp_invoice/__openerp__.py	2013-10-04 19:03:16 +0000
+++ contract_isp_invoice/__openerp__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -36,10 +36,11 @@
 * Refund on contract closing
 * Exception services invoice logic
 """,
-    'author': 'Savoir-faire Linux (joao.gama@xxxxxxxxxxxxxxxxxxxx)',
+    'author': 'Savoirfaire-Linux Inc',
     'website': 'www.savoirfairelinux.com',
     'license': 'AGPL-3',
     'depends': ['contract_isp'],
+<<<<<<< TREE
     'data': [
         'security/ir.model.access.csv',
         'contract_isp_invoice_data.xml',
@@ -48,5 +49,13 @@
         'wizard/close_contract_view.xml'
     ],
     'active': False,
+=======
+    'data': ['contract_isp_invoice_data.xml',
+             'contract_isp_invoice_view.xml',
+             'wizard/contract_isp_invoice_invoice_create.xml',
+             'wizard/close_contract_view.xml'],
+    'auto_install': False,
+>>>>>>> MERGE-SOURCE
     'installable': True,
 }
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_invoice/contract.py'
--- contract_isp_invoice/contract.py	2013-10-04 19:03:16 +0000
+++ contract_isp_invoice/contract.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<http://www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -23,14 +23,18 @@
 import logging
 import time
 import datetime
+<<<<<<< TREE
 from openerp.osv import orm, fields
 from openerp.tools.translate import _
+=======
+from openerp.osv import osv, fields
+>>>>>>> MERGE-SOURCE
 from openerp.addons.contract_isp.contract import add_months, date_interval
+from openerp.tools.translate import _
 
 _logger = logging.getLogger(__name__)
 
-
-class res_company(orm.Model):
+class res_company(osv.Model):
     _inherit = "res.company"
 
     def _days(self, cr, uid, context=None):
@@ -40,19 +44,17 @@
         'invoice_day': fields.selection(_days, 'Invoice day'),
     }
 
-
-class res_partner(orm.Model):
+class res_partner(osv.Model):
     _inherit = "res.partner"
 
     def _get_default_payment_term(self, cr, uid, context=None):
-        return self.pool.get('ir.model.data').get_object_reference(
-            cr, uid, 'contract_isp_invoice',
-            'account_payment_term_end_of_month')[1]
+        return self.pool.get('ir.model.data').get_object_reference(cr, uid, 'contract_isp_invoice','account_payment_term_end_of_month')[1]
 
     _defaults = {
         'property_payment_term': lambda s, cr, uid, ctx: s._get_default_payment_term(cr, uid, ctx)
     }
 
+<<<<<<< TREE
 
 class account_voucher(orm.Model):
     _inherit = 'account.voucher'
@@ -205,6 +207,9 @@
 
 
 class account_analytic_account(orm.Model):
+=======
+class account_analytic_account(osv.Model):
+>>>>>>> MERGE-SOURCE
     _inherit = "account.analytic.account"
 
     _columns = {
@@ -227,29 +232,11 @@
         res_company_obj = self.pool.get('res.company')
         account_invoice_obj = self.pool.get('account.invoice')
 
-        cuttoff_day = res_company_obj.read(
-            cr, uid,
-            res_company_obj._company_default_get(cr, uid, context),
-            fields=['cutoff_day'],
-            context=context)['cutoff_day']
-
-        cutoff_date = datetime.date(
-            datetime.date.today().year,
-            datetime.date.today().month,
-            int(cuttoff_day)
-        )
-
-        invoice_day = res_company_obj.read(
-            cr, uid,
-            res_company_obj._company_default_get(cr, uid, context),
-            fields=['invoice_day'],
-            context=context)['invoice_day']
-
-        invoice_date = datetime.date(
-            datetime.date.today().year,
-            datetime.date.today().month,
-            int(invoice_day)
-        )
+        cuttoff_day = res_company_obj.read(cr, uid,res_company_obj._company_default_get(cr, uid, context),fields=['cutoff_day'],context=context)['cutoff_day']
+        cutoff_date = datetime.date(datetime.date.today().year,datetime.date.today().month,int(cuttoff_day))
+
+        invoice_day = res_company_obj.read(cr, uid,res_company_obj._company_default_get(cr, uid, context),fields=['invoice_day'],context=context)['invoice_day']
+        invoice_date = datetime.date(datetime.date.today().year,datetime.date.today().month,int(invoice_day))
 
         ret = []
         for contract_id in ids:
@@ -259,12 +246,12 @@
                      ('product_id', '!=', None),
                      ('is_prorata', '=', prorata)]
 
-            ids_to_invoice = account_analytic_line.search(cr, uid, query,
-                                                          context=context)
+            ids_to_invoice = account_analytic_line.search(cr, uid, query,context=context)
             if ids_to_invoice:
                 data = {
                     'name': True,
                 }
+<<<<<<< TREE
                 inv = account_analytic_line.invoice_cost_create(
                     cr, uid, ids_to_invoice, data=data, context=context)
                 if isinstance(inv, list):
@@ -274,12 +261,16 @@
                 else:
                     ret.append(inv)
 
+=======
+                inv = account_analytic_line.invoice_cost_create(cr, uid, ids_to_invoice, data=data, context=context)
+>>>>>>> MERGE-SOURCE
                 # jgama - If its a prorata invoice, change the invoice date
                 #         according to the invoice_day variable
                 if prorata:
                     if datetime.date.today() <= cutoff_date:
                         date_invoice = invoice_date.strftime('%Y-%m-%d')
                     else:
+<<<<<<< TREE
                         date_invoice = add_months(invoice_date, 1).strftime(
                             '%Y-%m-%d')
 
@@ -308,7 +299,29 @@
                             cr, uid, mail_template_id, inv, context=context)
                         mail_message = mail_mail_obj.browse(
                             cr, uid, mail_id, context=context).mail_message_id
+=======
+                        date_invoice = add_months(invoice_date, 1).strftime('%Y-%m-%d')
+                    account_invoice_obj.write(cr, uid, inv, {'date_invoice': date_invoice},context=context)
+                a = account_invoice_obj._workflow_signal(cr, uid, inv, 'invoice_open', context)
+                mail_template_obj = self.pool.get('email.template')
+                ir_model_data_obj = self.pool.get('ir.model.data')
+                mail_template_id = ir_model_data_obj.get_object_reference(cr, uid, 'account', 'email_template_edi_invoice')[1]
+                mail_mail_obj = self.pool.get('mail.mail')
+                if isinstance(inv, list):
+                    for i in inv:
+                        mail_id = mail_template_obj.send_mail(cr, uid, mail_template_id, i, context=context)
+                        mail_message = mail_mail_obj.browse(cr, uid, mail_id, context=context).mail_message_id
+>>>>>>> MERGE-SOURCE
                         mail_message.write({'type': 'email'})
+<<<<<<< TREE
+=======
+                        ret.append(i)
+                else:
+                    mail_id = mail_template_obj.send_mail(cr, uid, mail_template_id, inv, context=context)
+                    mail_message = mail_mail_obj.browse(cr, uid, mail_id, context=context).mail_message_id
+                    mail_message.write({'type': 'email'})
+                    ret.append(inv)
+>>>>>>> MERGE-SOURCE
 
         if return_int:
             if len(ret) == 0:
@@ -329,6 +342,7 @@
             'target': 'new'
         }
 
+<<<<<<< TREE
     def prepare_voucher(self, cr, uid, ids, context=None):
         if context is None:
             context = {}
@@ -373,6 +387,9 @@
 
 
 class account_analytic_line(orm.Model):
+=======
+class account_analytic_line(osv.Model):
+>>>>>>> MERGE-SOURCE
     _inherit = 'account.analytic.line'
 
     def invoice_cost_create(self, cr, uid, ids, data=None, context=None):
@@ -402,8 +419,7 @@
                 journal_types[line.journal_id.type] = set()
             journal_types[line.journal_id.type].add(line.account_id.id)
         for journal_type, account_ids in journal_types.items():
-            for account in analytic_account_obj.browse(
-                    cr, uid, list(account_ids), context=context):
+            for account in analytic_account_obj.browse(cr, uid, list(account_ids), context=context):
                 partner = account.partner_id
                 if (not partner) or not (account.pricelist_id):
                     raise osv.except_osv(
@@ -412,9 +428,7 @@
 
                 date_due = False
                 if partner.property_payment_term:
-                    pterm_list = account_payment_term_obj.compute(
-                        cr, uid, partner.property_payment_term.id, value=1,
-                        date_ref=time.strftime('%Y-%m-%d'))
+                    pterm_list = account_payment_term_obj.compute(cr, uid, partner.property_payment_term.id, value=1,date_ref=time.strftime('%Y-%m-%d'))
                     if pterm_list:
                         pterm_list = [line[0] for line in pterm_list]
                         pterm_list.sort()
@@ -452,7 +466,6 @@
 
                 for product_id, user_id, factor_id, total_price, qty, uom in cr.fetchall():
                     context2.update({'uom': uom})
-
                     if data.get('product'):
                         # force product, use its public price
                         product_id = data['product'][0]
@@ -482,27 +495,19 @@
                         'uos_id': uom,
                         'account_analytic_id': account.id,
                     }
-                    product = product_obj.browse(
-                        cr, uid, product_id, context=context2)
+                    product = product_obj.browse(cr, uid, product_id, context=context2)
                     if product:
-                        factor_name = data.get('product_name', '') and \
-                            product_obj.name_get(
-                                cr, uid, [product_id], context=context2)[0][1]
-                        if factor.customer_name and data.get('factor_name',
-                                                             False):
+                        factor_name = data.get('product_name', '') and product_obj.name_get(cr, uid, [product_id], context=context2)[0][1]
+                        if factor.customer_name and data.get('factor_name',False):
                             factor_name += ' - ' + factor.customer_name
 
-                        general_account = product.property_account_income or \
-                            product.categ_id.property_account_income_categ
+                        general_account = product.property_account_income or product.categ_id.property_account_income_categ
                         if not general_account:
                             raise osv.except_osv(
                                 _("Configuration Error!"),
                                 _("Please define income account for product '%s'.") % product.name)
                         taxes = product.taxes_id or general_account.tax_ids
-                        tax = fiscal_pos_obj.map_tax(
-                            cr, uid,
-                            account.partner_id.property_account_position,
-                            taxes)
+                        tax = fiscal_pos_obj.map_tax(cr, uid,account.partner_id.property_account_position,taxes)
                         curr_line.update({
                             'invoice_line_tax_id': [(6, 0, tax)],
                             'name': factor_name,
@@ -523,18 +528,14 @@
                             details.append(line['date'])
                         if data.get('time', False):
                             if line['product_uom_id']:
-                                details.append("%s %s" % (
-                                    line['unit_amount'],
-                                    product_uom_obj.browse(
-                                        cr, uid, [line['product_uom_id']],
-                                        context2)[0].name))
+                                details.append("%s %s" % (line['unit_amount'],
+                                    product_uom_obj.browse(cr, uid, [line['product_uom_id']],context2)[0].name))
 
                             else:
                                 details.append("%s" % (line['unit_amount'], ))
                         if data.get('name', False):
                             details.append(line['name'])
-                        note.append(u' - '.join(
-                            map(lambda x: unicode(x) or '', details)))
+                        note.append(u' - '.join(map(lambda x: unicode(x) or '', details)))
                     if note:
                         if curr_line['name']:
                             curr_line['name'] += "\n" + ("\n".join(
@@ -542,10 +543,9 @@
                         else:
                             curr_line['name'] = "\n".join(
                                 map(lambda x: unicode(x) or '', note))
-                    invoice_line_obj.create(
-                        cr, uid, curr_line, context=context)
+                    invoice_line_obj.create(cr, uid, curr_line, context=context)
                     cr.execute("update account_analytic_line set invoice_id=%s WHERE account_id = %s and id IN %s", (last_invoice, account.id, tuple(ids)))
-
-                invoice_obj.button_reset_taxes(
-                    cr, uid, [last_invoice], context)
+                invoice_obj.button_reset_taxes(cr, uid, [last_invoice], context)
+                    
         return invoices
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== removed file 'contract_isp_invoice/contract_isp_invoice_demo.xml'
=== removed file 'contract_isp_invoice/contract_isp_invoice_report.xml'
=== removed file 'contract_isp_invoice/contract_isp_invoice_security.xml'
=== modified file 'contract_isp_invoice/contract_isp_invoice_view.xml'
--- contract_isp_invoice/contract_isp_invoice_view.xml	2013-10-04 16:19:20 +0000
+++ contract_isp_invoice/contract_isp_invoice_view.xml	2013-10-11 09:17:58 +0000
@@ -1,23 +1,39 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <openerp>
     <data>
-	<record id="view_company_contract_isp_invoice_form" model="ir.ui.view">
+        <record id="view_company_contract_isp_invoice_form" model="ir.ui.view">
             <field name="name">contract.isp.invoice.res.company.form</field>
             <field name="model">res.company</field>
-	    <field name="inherit_id" ref="contract_isp.view_company_contract_isp_form"/>
+            <field name="inherit_id" ref="contract_isp.view_company_contract_isp_form"/>
             <field name="arch" type="xml">
-		<field name="cutoff_day" position="after">
-		    <field name="invoice_day" />
-		</field>
-	    </field>
-	</record>
-
+                <field name="cutoff_day" position="after">
+                    <field name="invoice_day" />
+                </field>
+            </field>
+        </record>
+
+<<<<<<< TREE
+=======
+        <record id="action_view_create_voucher" model="ir.actions.act_window">
+            <field name="name">Create Voucher</field>
+            <field name="type">ir.actions.act_window</field>
+            <field name="src_model">account.analytic.account</field>
+            <field name="res_model">account.voucher</field>
+            <field name="view_type">form</field>
+            <field name="view_mode">form</field>
+            <field name="context">{'default_type': 'receipt', 'default_partner_id': default_partner_id}</field>
+            <field name="view_id" ref='account_voucher.view_vendor_receipt_form' />
+            <field name="target">new</field>
+        </record>
+
+>>>>>>> MERGE-SOURCE
         <record id="contract_isp_form_button1" model="ir.ui.view">
             <field name="name">contract.isp.form.button1</field>
             <field name="model">account.analytic.account</field>
             <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
             <field name="arch" type="xml">
                 <xpath expr="//div[@name='buttons']" position='inside'>
+<<<<<<< TREE
 		    <button string="Create Voucher"
 			    name="prepare_voucher"
 			    context="{'default_partner_id': partner_id}"
@@ -25,10 +41,17 @@
 		</xpath>
 	    </field>
 	</record>
+=======
+                    <button string="Create Voucher" name="%(action_view_create_voucher)d" context="{'default_partner_id': partner_id}" type="action" />
+                </xpath>
+           </field>
+        </record>
+>>>>>>> MERGE-SOURCE
 
         <record id="view_voucher_form_post_later" model="ir.ui.view">
             <field name="name">account.voucher.form.postlater</field>
             <field name="model">account.voucher</field>
+<<<<<<< TREE
             <field name="inherit_id" ref="account_voucher.view_vendor_receipt_form" />
             <field name="arch" type="xml">
 		<button name="proforma_voucher" position="before">
@@ -82,5 +105,30 @@
 	<!--     </field> -->
 	<!-- </record> -->
 
+=======
+            <field name="inherit_id" ref="account_voucher.view_voucher_form" />
+            <field name="arch" type="xml">
+                <field name="account_id" position="after">
+                    <field name="analytic_id" />
+                </field>
+            </field>
+        </record>
+
+        <!--
+								<record id="view_partner_contract_isp_invoice_form" model="ir.ui.view">
+            <field name="name">contract.isp.invoice.res.partner.form</field>
+            <field name="model">res.partner</field>
+            <field name="inherit_id" ref="account.view_partner_property_form"/>
+            <field name="arch" type="xml">
+                <xpath expr="//page[@string='Accounting']" position="after">
+                    <page string="ISP Contract Management">
+                    <field name="data_account_id"/>
+                    <field name="telco_account_id"/>
+                    </page> 
+                </xpath> 
+            </field>
+        </record> 
+								-->
+>>>>>>> MERGE-SOURCE
     </data>
 </openerp>

=== removed file 'contract_isp_invoice/contract_isp_invoice_wizard.xml'
=== removed directory 'contract_isp_invoice/report'
=== removed file 'contract_isp_invoice/report/__init__.py'
--- contract_isp_invoice/report/__init__.py	2013-09-16 17:59:01 +0000
+++ contract_isp_invoice/report/__init__.py	1970-01-01 00:00:00 +0000
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-##############################################################################
-#
-#    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<www.savoirfairelinux.com>).
-#
-#    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 report

=== modified file 'contract_isp_invoice/wizard/__init__.py'
--- contract_isp_invoice/wizard/__init__.py	2013-09-16 17:59:01 +0000
+++ contract_isp_invoice/wizard/__init__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -18,8 +18,10 @@
 #    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 activate_contract_service
-import contract_isp_invoice_invoice_create
-import close_contract
+##########################################################################
+
+from . import activate_contract_service
+from . import contract_isp_invoice_invoice_create
+from . import close_contract
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_invoice/wizard/activate_contract_service.py'
--- contract_isp_invoice/wizard/activate_contract_service.py	2013-10-04 16:19:20 +0000
+++ contract_isp_invoice/wizard/activate_contract_service.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -18,15 +18,14 @@
 #    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 time
 import datetime
-from openerp.osv import orm, fields
+from openerp.osv import osv, fields
 from openerp.addons.contract_isp.contract import add_months
 
-
-class contract_service_activate(orm.TransientModel):
+class contract_service_activate(osv.TransientModel):
     _inherit = 'contract.service.activate'
 
     def activate(self, cr, uid, ids, context=None):
@@ -39,9 +38,7 @@
         res_company_obj = self.pool.get('res.company')
         wizard = self.browse(cr, uid, ids[0], context)
 
-        ret = super(contract_service_activate, self).activate(cr, uid,
-                                                              ids,
-                                                              context=context)
+        ret = super(contract_service_activate, self).activate(cr, uid,ids,context=context)
 
         contract_service_obj = self.pool.get('contract.service')
         account_analytic_account_obj = self.pool.get('account.analytic.account')
@@ -53,9 +50,38 @@
         ]
         # Check if all services were activated
         if not contract_service_obj.search(cr, uid, query, context=context):
+<<<<<<< TREE
+=======
+            # jgama - Create the activation invoice
+            inv = account_analytic_account_obj.create_invoice(cr, uid, wizard.account_id.id, context=context)
+
+            voucher_id = account_voucher_obj.search(cr, uid,[('partner_id', '=', wizard.account_id.partner_id.id)],context=context)
+            if voucher_id:
+                query = [
+                    ('partner_id', '=', wizard.account_id.partner_id.id),
+                    ('account_id', '=', wizard.account_id.partner_id.property_account_receivable.id),
+                    ('reconcile_id', '=', False)
+                ]
+
+                ids_to_reconcile = account_move_line_obj.search(cr, uid, query,context=context)
+                if ids_to_reconcile:
+                    # Code from account/wizard/account_reconcile.py/\
+                    #    account_move_line_reconcile/trans_rec_reconcile_full
+                    period_obj = self.pool.get('account.period')
+                    date = False
+                    period_id = False
+                    journal_id = False
+                    account_id = False
+
+                    date = time.strftime('%Y-%m-%d')
+                    ctx = dict(context or {}, account_period_prefer_normal=True)
+                    ids = period_obj.find(cr, uid, dt=date, context=ctx)
+                    if ids:
+                        period_id = ids[0]
+                        account_move_line_obj.reconcile(cr, uid, ids_to_reconcile,'manual', account_id,period_id, journal_id,context=context)
+>>>>>>> MERGE-SOURCE
 
             # jgama - Try to create the prorata invoice
-            pro_inv = account_analytic_account_obj.create_invoice(
-                cr, uid, wizard.account_id.id, prorata=True, context=context)
-
+            pro_inv = account_analytic_account_obj.create_invoice(cr, uid, wizard.account_id.id, prorata=True, context=context)
         return ret
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_invoice/wizard/close_contract.py'
--- contract_isp_invoice/wizard/close_contract.py	2013-09-16 17:59:01 +0000
+++ contract_isp_invoice/wizard/close_contract.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<http://www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -18,19 +18,18 @@
 #    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 logging
 import calendar
 import datetime
-from openerp.osv import orm, fields
+from openerp.osv import osv, fields
 from openerp.report import report_sxw
 from openerp.tools import convert
 from openerp.tools.translate import _
 from openerp.addons.contract_isp.contract import date_interval
 
-
-class contract_isp_close(orm.TransientModel):
+class contract_isp_close(osv.TransientModel):
     _name = 'contract.isp.close'
 
     def _get_account_id(self, cr, uid, context=None):
@@ -58,33 +57,21 @@
         contract = self.browse(cr, uid, ids, context=context)[0].account_id
 
         today = datetime.date.today()
-
         query = [
             ('partner_id', '=', contract.partner_id.id),
             ('origin', '=', contract.name)
         ]
-
-        last_invoice_id = account_invoice_obj.search(cr, uid, query,
-                                                     context=context)
+        last_invoice_id = account_invoice_obj.search(cr, uid, query,context=context)
         if last_invoice_id:
-            last_invoice = account_invoice_obj.browse(cr, uid,
-                                                      last_invoice_id[-1],
-                                                      context=context)
+            last_invoice = account_invoice_obj.browse(cr, uid,last_invoice_id[-1],context=context)
             if last_invoice.date_invoice > wizard.close_date:
-                raise orm.except_orm(_('Error!'), _('Close date before last invoice date!'))
-
+                raise osv.except_osv(_('Error!'), _('Close date before last invoice date!'))
             amount_untaxed = last_invoice.amount_untaxed
-
-            month_days = calendar.monthrange(int(wizard.close_date[:4]),
-                                             int(wizard.close_date[5:7]))[1]
-
+            month_days = calendar.monthrange(int(wizard.close_date[:4]),int(wizard.close_date[5:7]))[1]
             used_days = month_days - int(wizard.close_date[8:10])
             ptx = (100 * used_days / month_days) / 100.0
             amount = amount_untaxed * ptx
-            interval = date_interval(datetime.date(int(wizard.close_date[:4]),
-                                                   int(wizard.close_date[5:7]),
-                                                   int(wizard.close_date[8:10])),
-                                     True)
+            interval = date_interval(datetime.date(int(wizard.close_date[:4]),int(wizard.close_date[5:7]),int(wizard.close_date[8:10])),True)
 
             line = {
                 'name': ' '.join([_('Credit refund'), interval]),
@@ -98,17 +85,13 @@
                 'date': wizard.close_date
             }
             account_analytic_line_obj.create(cr, uid, line, context=context)
-
-        contract.write({'close_date': wizard.close_date,
-                        'close_reason': wizard.close_reason})
+        contract.write({'close_date': wizard.close_date,'close_reason': wizard.close_reason})
 
         mail_template_obj = self.pool.get('email.template')
-        mail_template_id = self.pool.get('ir.model.data').get_object_reference(
-            cr, uid, 'contract_isp_invoice',
-            'email_template_contract_isp_invoice_close')
+        mail_template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'contract_isp_invoice','email_template_contract_isp_invoice_close')
         mail_id = mail_template_obj.send_mail(cr, uid, mail_template_id[1], contract.id, context=context)
         mail_message = mail_mail_obj.browse(cr, uid, mail_id, context=context).mail_message_id
         mail_message.write({'type': 'email'})
         contract.write({'state': 'close'})
         return {}
-        
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== added file 'contract_isp_invoice/wizard/close_contract_active_view.xml'
--- contract_isp_invoice/wizard/close_contract_active_view.xml	1970-01-01 00:00:00 +0000
+++ contract_isp_invoice/wizard/close_contract_active_view.xml	2013-10-11 09:17:58 +0000
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+        <record id="view_close_contract" model="ir.ui.view">
+            <field name="name">A</field>
+            <field name="model">contract.service.activate</field>
+            <field name="arch" type="xml">
+                <form string="Activate Service" version="7.0">
+		    <group>
+			<field name="activation_date" />
+			<field name="account_id" invisible="1" />
+			<field name="service_id" invisible="1" />
+		    </group>
+		    <footer>
+			<button 
+			    name="activate"
+			    string="Activate"
+			    type="object"
+			    class="oe_highlight" />
+			<button
+			    string="Cancel"
+			    class="oe_link"
+			    special="cancel" />
+		    </footer>
+		</form>
+	    </field>
+	</record>
+    <record id="action_view_contract_service_activate" model="ir.actions.act_window">
+        <field name="name">Activate Service</field>
+        <field name="type">ir.actions.act_window</field>
+ 	<field name="src_model">contract.service</field>
+        <field name="res_model">contract.service.activate</field>
+        <field name="view_type">form</field>
+        <field name="view_mode">form</field>
+ 	<field name="context">{'default_service_id': active_id}</field>
+        <field name="target">new</field>
+    </record>
+
+    </data>
+</openerp>

=== removed file 'contract_isp_invoice/wizard/close_contract_view.py'
--- contract_isp_invoice/wizard/close_contract_view.py	2013-09-16 17:59:01 +0000
+++ contract_isp_invoice/wizard/close_contract_view.py	1970-01-01 00:00:00 +0000
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<openerp>
-    <data>
-        <record id="view_close_contract" model="ir.ui.view">
-            <field name="name">A</field>
-            <field name="model">contract.service.activate</field>
-            <field name="arch" type="xml">
-                <form string="Activate Service" version="7.0">
-		    <group>
-			<field name="activation_date" />
-			<field name="account_id" invisible="1" />
-			<field name="service_id" invisible="1" />
-		    </group>
-		    <footer>
-			<button 
-			    name="activate"
-			    string="Activate"
-			    type="object"
-			    class="oe_highlight" />
-			<button
-			    string="Cancel"
-			    class="oe_link"
-			    special="cancel" />
-		    </footer>
-		</form>
-	    </field>
-	</record>
-        <record id="action_view_contract_service_activate" model="ir.actions.act_window">
-            <field name="name">Activate Service</field>
-            <field name="type">ir.actions.act_window</field>
-	    <field name="src_model">contract.service</field>
-            <field name="res_model">contract.service.activate</field>
-            <field name="view_type">form</field>
-            <field name="view_mode">form</field>
-	    <field name="context">{'default_service_id': active_id}</field>
-            <field name="target">new</field>
-        </record>
-
-    </data>
-</openerp>

=== modified file 'contract_isp_invoice/wizard/close_contract_view.xml'
--- contract_isp_invoice/wizard/close_contract_view.xml	2013-09-16 17:59:01 +0000
+++ contract_isp_invoice/wizard/close_contract_view.xml	2013-10-11 09:17:58 +0000
@@ -6,37 +6,29 @@
             <field name="model">contract.isp.close</field>
             <field name="arch" type="xml">
                 <form string="Close Contract" version="7.0">
-		    <field name="account_id" invisible="1" />
-		    <p>Confirm the termination of this contract?</p>
-		    <group>
-			<field name="close_date" />
-		    </group>
-		    <group colspan="4" string="Reason">
-			<field name="close_reason" nolabel="1" />
-		    </group>
-		    <footer>
-			<button 
-			    name="do_close"
-			    string="Confirm"
-			    type="object"
-			    class="oe_highlight" />
-			<button
-			    string="Cancel"
-			    class="oe_link"
-			    special="cancel" />
-		    </footer>
-		</form>
-	    </field>
-	</record>
+                    <field name="account_id" invisible="1" />
+                    <p>Confirm the termination of this contract?</p>
+                    <group>
+                        <field name="close_date" />
+                    </group>
+                    <group colspan="4" string="Reason">
+                        <field name="close_reason" nolabel="1" />
+                    </group>
+                    <footer>
+                        <button name="do_close" string="Confirm" type="object" class="oe_highlight" /> 
+                        <button string="Cancel" class="oe_link" special="cancel" />
+                    </footer>
+                </form>
+            </field>
+        </record>
         <record id="action_view_contract_isp_close" model="ir.actions.act_window">
             <field name="name">Close contract</field>
             <field name="type">ir.actions.act_window</field>
-	    <field name="src_model">account.analytic.account</field>
+            <field name="src_model">account.analytic.account</field>
             <field name="res_model">contract.isp.close</field>
             <field name="view_type">form</field>
             <field name="view_mode">form</field>
             <field name="target">new</field>
         </record>
-
     </data>
 </openerp>

=== modified file 'contract_isp_invoice/wizard/contract_isp_invoice_invoice_create.py'
--- contract_isp_invoice/wizard/contract_isp_invoice_invoice_create.py	2013-09-16 17:59:01 +0000
+++ contract_isp_invoice/wizard/contract_isp_invoice_invoice_create.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<http://www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -18,23 +18,22 @@
 #    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/>.
 #
-##############################################################################
-
-from openerp.osv import orm, fields
-
-
-class contract_isp_invoice_invoice_create(orm.TransientModel):
+##########################################################################
+
+from openerp.osv import osv, fields
+
+class contract_isp_invoice_invoice_create(osv.TransientModel):
     _inherit = 'hr.timesheet.invoice.create'
 
     _columns = {
-        'factor_name': fields.boolean('Invoice Factor',
-                                      help='Show the invoice factor'),
-        'product_name': fields.boolean('Product Name',
-                                       help='Show the product name')
+        'factor_name': fields.boolean('Invoice Factor',help='Show the invoice factor'),
+        'product_name': fields.boolean('Product Name',help='Show the product name')
     }
 
     _defaults = {
         'factor_name': False,
         'product_name': False,
         'name': True
-    }
\ No newline at end of file
+    }
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_invoice/wizard/contract_isp_invoice_invoice_create.xml'
--- contract_isp_invoice/wizard/contract_isp_invoice_invoice_create.xml	2013-09-16 17:59:01 +0000
+++ contract_isp_invoice/wizard/contract_isp_invoice_invoice_create.xml	2013-10-11 09:17:58 +0000
@@ -4,13 +4,13 @@
         <record id="view_contract_isp_invoice_create" model="ir.ui.view">
             <field name="name">contract.isp.invoice.create.form</field>
             <field name="model">hr.timesheet.invoice.create</field>
-	    <field name="inherit_id" ref="hr_timesheet_invoice.view_hr_timesheet_invoice_create" />
+            <field name="inherit_id" ref="hr_timesheet_invoice.view_hr_timesheet_invoice_create" />
             <field name="arch" type="xml">
-		<field name="price" position="after">
-		    <field name="factor_name" />
-		    <field name="product_name" />
-		</field>
-	    </field>
-	</record>
+            <field name="price" position="after">
+                <field name="factor_name" />
+                <field name="product_name" />
+            </field>
+            </field>
+        </record>
     </data>
 </openerp>

=== modified file 'contract_isp_package_configurator/__init__.py'
--- contract_isp_package_configurator/__init__.py	2013-09-16 17:59:01 +0000
+++ contract_isp_package_configurator/__init__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
 #    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -20,6 +20,8 @@
 #
 ##############################################################################
 
-import wizard
-import workflow
-import company
+from . import wizard
+from . import workflow
+from . import company
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_package_configurator/__openerp__.py'
--- contract_isp_package_configurator/__openerp__.py	2013-09-16 17:59:01 +0000
+++ contract_isp_package_configurator/__openerp__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
 #    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -39,6 +39,7 @@
         'workflow/contract_isp_package_configurator.xml',
         'contract_isp_package_configurator_view.xml',
     ],
-    'active': False,
+    'auto_install': False,
     'installable': True,
 }
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_package_configurator/company.py'
--- contract_isp_package_configurator/company.py	2013-09-16 17:59:01 +0000
+++ contract_isp_package_configurator/company.py	2013-10-11 09:17:58 +0000
@@ -2,7 +2,8 @@
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2013 Savoir-faire Linux (<http://www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -19,16 +20,13 @@
 #
 ##############################################################################
 
-from openerp.osv import fields, orm
-
-
-class res_company(orm.Model):
+from openerp.osv import fields, osv
+
+
+class res_company(osv.Model):
     _inherit = 'res.company'
 
     _columns = {
-        'default_product_category': fields.many2one(
-            'product.category',
-            'Default Product Category',
-            required=True,
-            help='''Set the default starting point for the package configuration wizard'''),
+        'default_product_category': fields.many2one('product.category','Default Product Category',required=True,help='''Set the default starting point for the package configuration wizard'''),
     }
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_package_configurator/contract_isp_package_configurator_view.xml'
--- contract_isp_package_configurator/contract_isp_package_configurator_view.xml	2013-09-16 17:59:01 +0000
+++ contract_isp_package_configurator/contract_isp_package_configurator_view.xml	2013-10-11 09:17:58 +0000
@@ -7,23 +7,20 @@
             <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
             <field name="arch" type="xml">
                 <xpath expr="//div[@name='buttons']" position='inside'>
-		    <button string="Package Configurator"
-			    name="%(action_contract_isp_package_configurator)d"
-			    type="action" />
-		</xpath>
-	    </field>
-	</record>
+                    <button string="Package Configurator" name="%(action_contract_isp_package_configurator)d" type="action" />
+                </xpath>
+            </field>
+        </record>
         <record id="view_company_form_package_configurator" model="ir.ui.view">
             <field name="name">company.form.package.configurator</field>
             <field name="model">res.company</field>
             <field name="inherit_id" ref="contract_isp.view_company_contract_isp_form"/>
             <field name="arch" type="xml">
-		<field name="parent_account_id" position="before">
-		    <field name="default_product_category" />
-		</field>
-	    </field>
-	</record>
-
+                <field name="parent_account_id" position="before">
+                    <field name="default_product_category" />
+                </field>
+            </field>
+        </record>
     </data>
 </openerp>
 

=== modified file 'contract_isp_package_configurator/res_config_view.xml'
--- contract_isp_package_configurator/res_config_view.xml	2013-09-16 17:59:01 +0000
+++ contract_isp_package_configurator/res_config_view.xml	2013-10-11 09:17:58 +0000
@@ -1,26 +1,24 @@
 <openerp>
-  <data>
+    <data>
     <record id="view_package_config_settings" model="ir.ui.view">
-      <field name="name">Package Settings</field>
-      <field name="model">sale.config.settings</field>
-      <field name="inherit_id" ref="base_setup.view_sale_config_settings" />
-      <field name="arch" type="xml">
+        <field name="name">Package Settings</field>
+        <field name="model">sale.config.settings</field>
+        <field name="inherit_id" ref="base_setup.view_sale_config_settings" />
+        <field name="arch" type="xml">
         <div name="customer feature" position="before">
-          <separator string="Package configuration" />
-
-          <group>
-            <label for="id" string="Default options" />
-
-            <div>
-              <div>
-                <label for="default_category" />
-                <field name="default_category" class="oe_inline" />
-                <!-- FIXME domaine de default_category -->
-              </div>
-            </div>
-          </group>
+            <separator string="Package configuration" />
+            <group>
+                <label for="id" string="Default options" />
+                <div>
+                    <div>
+                    <label for="default_category" />
+                    <field name="default_category" class="oe_inline" />
+                    <!-- FIXME domaine de default_category -->
+                    </div>
+                </div>
+            </group>
         </div>
-      </field>
+        </field>
     </record>
-  </data>
+    </data>
 </openerp>

=== modified file 'contract_isp_package_configurator/wizard/__init__.py'
--- contract_isp_package_configurator/wizard/__init__.py	2013-09-16 17:59:01 +0000
+++ contract_isp_package_configurator/wizard/__init__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
 #    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -21,3 +21,5 @@
 ##############################################################################
 
 import package_configurator
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_package_configurator/wizard/package_configurator.py'
--- contract_isp_package_configurator/wizard/package_configurator.py	2013-10-10 19:22:10 +0000
+++ contract_isp_package_configurator/wizard/package_configurator.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
 #    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -20,30 +20,31 @@
 #
 ##############################################################################
 
-from openerp.osv import orm, fields
+from openerp.osv import osv, fields
 from openerp.tools.translate import _
 
-
-class contract_service_configurator_line(orm.TransientModel):
+class contract_service_configurator_line(osv.TransientModel):
     _name = 'contract.service.configurator.line'
 
     #def _get_stock_production_lot_available(self, cr, uid, )
     _columns = {
         'name': fields.char('Name'),
         'product_id': fields.many2one('product.product', 'Product'),
-        'configurator_id': fields.many2one('contract.service.configurator',
-                                           'Package Configurator'),
-        'parent_id': fields.many2one('contract.service.configurator.line',
-                                     'Parent'),
+        'configurator_id': fields.many2one('contract.service.configurator','Package Configurator'),
+        'parent_id': fields.many2one('contract.service.configurator.line','Parent'),
         'serial': fields.many2one('stock.production.lot', 'Serial Number'),
         'message': fields.text('Message'),
         'handle_dependency': fields.boolean('Handle dependencies'),
+<<<<<<< TREE
         'stock_move_id': fields.many2one('stock.move', 'Stock Move'),
         'state': fields.selection((('draft', _('Added')),
                                    ('message', _('Information')),
                                    ('serial', _('Select serial number')),
                                    ('stock', ('No Stock')),
                                    ('done', _('Done'))), 'State'),
+=======
+        'state': fields.selection((('draft', _('Added')),('message', _('Information')),('serial', _('Select serial number')),('stock', ('No Stock')),('done', _('Done'))), 'State'),
+>>>>>>> MERGE-SOURCE
     }
 
     _defaults = {
@@ -84,9 +85,13 @@
                 cr, uid, [stock_move_id], context=context)
 
             state = 'done'
+<<<<<<< TREE
 
         line.write({'state': state, 'stock_move_id': stock_move_id})
 
+=======
+        line.write({'state': state})
+>>>>>>> MERGE-SOURCE
         return line.configurator_id.router(data={})
 
     def unlink(self, cr, uid, ids, context=None):
@@ -119,7 +124,6 @@
     def onchange_product_id(self, cr, uid, ids, product_id, context):
         ret = {}
         product_product_obj = self.pool.get('product.product')
-
         if product_product_obj.browse(cr, uid, product_id, context).description:
             ret['warning'] = {
                 'title': _('Information'),
@@ -127,18 +131,31 @@
             }
         return ret
 
-
-class contract_service_configurator_dependency_line(orm.TransientModel):
+class contract_service_configurator_dependency_line(osv.TransientModel):
     _name = 'contract.service.configurator.dependency.line'
     _inherit = 'contract.service.configurator.line'
 
+<<<<<<< TREE
 
 class contract_service_configurator(orm.TransientModel):
+=======
+class contract_service_serial(osv.TransientModel):
+    _name = 'contract.service.serial'
+
+    _columns = {
+        'name': fields.char('Serial Number'),
+        'product_id': fields.many2one('product.product', 'Product'),
+        'prodlot_id': fields.many2one('stock.production.lot', 'Production Lot')
+    }
+
+class contract_service_configurator(osv.TransientModel):
+>>>>>>> MERGE-SOURCE
     _name = 'contract.service.configurator'
 
     def _get_default_category(self, cr, uid, context=None):
         res_company_obj = self.pool.get("res.company")
         company_id = res_company_obj._company_default_get(cr, uid, context)
+<<<<<<< TREE
         res_company = res_company_obj.browse(cr, uid, company_id,
                                              context=context)
         return res_company.default_product_category and \
@@ -159,23 +176,17 @@
             return False
         else:
             return True
+=======
+        res_company = res_company_obj.browse(cr, uid, company_id,context=context)
+        return res_company.default_product_category and res_company.default_product_category.id
+>>>>>>> MERGE-SOURCE
 
     _columns = {
         'contract_id': fields.many2one('account.analytic.account', 'Contract'),
-        'state': fields.selection((('draft', _('Start')),
-                                   ('product', _('Select product')),
-                                   ('dependency', _('Select components')),
-                                   ('done', _('Done'))), 'State'),
-        'line_ids': fields.one2many('contract.service.configurator.line',
-                                    'configurator_id',
-                                    'Line'),
-        'current_product_id': fields.many2one('product.product',
-                                              'Add Product'),
-        'dependency_ids': fields.many2many('contract.service.configurator.dependency.line',
-                                           'contract_service_configurator_dependency_rel',
-                                           'configurator_id',
-                                           'dependency_id',
-                                           'Dependencies'),
+        'state': fields.selection((('draft', _('Start')),('product', _('Select product')),('dependency', _('Select components')),('done', _('Done'))), 'State'),
+        'line_ids': fields.one2many('contract.service.configurator.line','configurator_id','Line'),
+        'current_product_id': fields.many2one('product.product','Add Product'),
+        'dependency_ids': fields.many2many('contract.service.configurator.dependency.line','contract_service_configurator_dependency_rel','configurator_id','dependency_id','Dependencies'),
         'root_category_id': fields.many2one('product.category', 'Category'),
         'product_category_id': fields.many2one('product.category', 'Category'),
         'is_level2': fields.boolean('Is level 2')
@@ -188,6 +199,7 @@
         'is_level2': lambda s, cr, uid, ctx: s._get_is_level2(cr, uid, ctx)
     }
 
+<<<<<<< TREE
     def onchange_product_category_id(self, cr, uid, ids,
                                      product_category_id, is_level2):
         domain = [('categ_id', '=', product_category_id)]
@@ -199,13 +211,56 @@
 
         ret['domain']['current_product_id'] = domain
 
+=======
+    def onchange_contract_id(self, cr, uid, ids, contract_id, root_category_id, context=None):
+        product_category_obj = self.pool.get('product.category')
+        if root_category_id:
+            return {'domain': {'product_category_id': [('id', 'child_of', [int(root_category_id)])]}}
+        else:
+            return {}
+
+    def onchange_product_id(self, cr, uid, ids, product_id, context=None):
+        ret = {}
+        product_product_obj = self.pool.get('product.product')
+        if product_id and product_product_obj.browse(cr, uid, product_id, context=context).type == 'product':
+            contract_service_serial = self.pool.get('contract.service.serial')
+            location_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'stock', 'stock_location_stock')[1]
+            stock_move_obj = self.pool.get('stock.move')
+            stock_production_lot_obj = self.pool.get('stock.production.lot')
+            clean_ids = contract_service_serial.search(cr, uid, [('product_id', '=', product_id)], context=context)
+            contract_service_serial.unlink(cr, uid, clean_ids, context=context)
+
+            query = [
+                ('product_id', '=', product_id),
+                ('stock_available', '>', 0.0)
+            ]
+            serial_ids = stock_production_lot_obj.search(cr, uid, query, context=context)
+            #stock_move_ids = stock_move_obj.search(cr, uid, query, context=context)
+            if serial_ids and product_product_obj.browse(cr, uid, product_id, context=context).qty_available > 0:
+                if isinstance(serial_ids, int):
+                    serial_ids = [serial_ids]
+
+                for line in stock_production_lot_obj.browse(cr, uid, serial_ids, context=context):
+                    if line.stock_available > 0.0:
+                        record = {
+                            'name': line.name,
+                            'product_id': line.product_id.id,
+                            'prodlot_id': line.id
+                        }
+                        contract_service_serial.create(cr, uid, record, context=context)
+            else:
+                ret['warning'] = {
+                    'title': _('Information'),
+                    'message': _("We don't have this product in stock at the moment!")
+                }
+                # ret['domain'] = {'product_category_id': [('id', 'child_of', [int(root_category_id)])]}
+>>>>>>> MERGE-SOURCE
         return ret
 
     def do_next(self, cr, uid, ids, context=None):
         contract_service_configurator_line_obj = self.pool.get('contract.service.configurator.line')
         contract_service_configurator_dependency_line_obj = self.pool.get('contract.service.configurator.dependency.line')
         product_product_obj = self.pool.get('product.product')
-
         wizard = self.browse(cr, uid, ids[0], context=context)
 
         for line in wizard.dependency_ids:
@@ -228,14 +283,9 @@
                 contract_service_configurator_line_obj.create(cr, uid, l, context=context)
 
         query = [('configurator_id', '=', wizard.id)]
-        ids_to_unlink = contract_service_configurator_dependency_line_obj.search(cr,
-                                                                                 uid,
-                                                                                 query,
-                                                                                 context=context)
+        ids_to_unlink = contract_service_configurator_dependency_line_obj.search(cr,uid,query,context=context)
         if ids_to_unlink:
-            contract_service_configurator_dependency_line_obj.unlink(cr, uid,
-                                                                     ids_to_unlink,
-                                                                     context)
+            contract_service_configurator_dependency_line_obj.unlink(cr, uid,ids_to_unlink,context)
 
         loop_deps = False
         for line in wizard.line_ids:
@@ -261,14 +311,11 @@
                             'message': line.product_id.description,
                             'state': state
                         }
-                        contract_service_configurator_dependency_line_obj.create(cr, uid, wl,
-                                                                                 context=context)
+                        contract_service_configurator_dependency_line_obj.create(cr, uid, wl,context=context)
 
                     elif dep.type == 'category':
                         query = [('categ_id', '=', dep.category_id.id)]
-                        product_ids = product_product_obj.search(cr, uid,
-                                                                 query,
-                                                                 context=context)
+                        product_ids = product_product_obj.search(cr, uid,query,context=context)
                         for product in product_product_obj.browse(cr, uid, product_ids, context=context):
                             if not wizard.is_level2 and dep.list_price < 0:
                                 continue
@@ -288,8 +335,7 @@
                                 'message': product.description,
                                 'state': state
                             }
-                            contract_service_configurator_dependency_line_obj.create(cr, uid, wl,
-                                                                                     context=context)
+                            contract_service_configurator_dependency_line_obj.create(cr, uid, wl,context=context)
                 line.write({'handle_dependency': False})
                 break
 
@@ -309,10 +355,7 @@
             wizard.write(record)
 
             query = [('configurator_id', '=', wizard.id)]
-            ids_to_unlink = contract_service_configurator_dependency_line_obj.search(cr,
-                                                                                     uid,
-                                                                                     query,
-                                                                                     context=context)
+            ids_to_unlink = contract_service_configurator_dependency_line_obj.search(cr,uid,query,context=context)
             return self.router(cr, uid, ids, {}, context=context)
 
     def do_add_current_product_id(self, cr, uid, ids, context=None):
@@ -326,7 +369,11 @@
             'contract.service.configurator.dependency.line')
         product_product_obj = self.pool.get('product.product')
         contract_service_serial_obj = self.pool.get('contract.service.serial')
+<<<<<<< TREE
 
+=======
+        ir_model_data_obj = self.pool.get('ir.model.data')
+>>>>>>> MERGE-SOURCE
         if wizard.current_product_id:
             #if group_agent_n2_id not in res_user.groups_id and \
             #        wizard.current_product_id.type == 'product' and \
@@ -339,7 +386,6 @@
                 state = 'serial'
             else:
                 state = 'done'
-
             record = {
                 'name': wizard.current_product_id.name,
                 'product_id': wizard.current_product_id.id,
@@ -347,6 +393,7 @@
                 'message': wizard.current_product_id.description,
                 'state': state
             }
+<<<<<<< TREE
             new_line = contract_service_configurator_line_obj.create(
                 cr, uid, record, context=context)
 
@@ -354,6 +401,11 @@
                     cr, uid, new_line,
                     context=context).product_id.dependency_ids:
 
+=======
+            new_line = contract_service_configurator_line_obj.create(cr, uid,record,context=context)
+            for dep in wizard.current_product_id.dependency_ids:
+                deps += 1
+>>>>>>> MERGE-SOURCE
                 if dep.type == 'product':
                     if not wizard.is_level2 and dep.product_id.list_price < 0:
                         continue
@@ -364,8 +416,11 @@
                         state = 'serial'
                     else:
                         state = 'done'
+<<<<<<< TREE
 
                     deps += 1
+=======
+>>>>>>> MERGE-SOURCE
                     wl = {
                         'name': dep.product_id.name,
                         'product_id': dep.product_id.id,
@@ -374,14 +429,12 @@
                         'message': dep.product_id.description,
                         'state': state
                     }
-                    new_dep = contract_service_configurator_dependency_line_obj.create(cr, uid, wl,
-                                                                                       context=context)
-
+                    new_dep = contract_service_configurator_dependency_line_obj.create(cr, uid, wl,context=context)
                     if dep.auto:
                         wizard.write({'dependency_ids': [(4, new_dep)]})
-
                 elif dep.type == 'category':
                     query = [('categ_id', '=', dep.category_id.id)]
+<<<<<<< TREE
                     product_ids = product_product_obj.search(cr, uid, query,
                                                              context=context)
                     for product in product_product_obj.browse(cr, uid,
@@ -390,13 +443,16 @@
                         if not wizard.is_level2 and dep.product_id.list_price < 0:
                             continue
 
+=======
+                    product_ids = product_product_obj.search(cr, uid, query,context=context)
+                    for product in product_product_obj.browse(cr, uid,product_ids,context=context):
+>>>>>>> MERGE-SOURCE
                         if product.description:
                             state = 'message'
                         elif product.type == 'product':
                             state = 'serial'
                         else:
                             state = 'done'
-
                         deps += 1
                         record = {
                             'name': product.name,
@@ -406,17 +462,19 @@
                             'message': product.description,
                             'state': state
                         }
+<<<<<<< TREE
                         contract_service_configurator_dependency_line_obj.create(
                             cr, uid, record, context=context)
 
+=======
+                        contract_service_configurator_dependency_line_obj.create(cr, uid,record,context=context)
+>>>>>>> MERGE-SOURCE
             record = {
                 'current_product_id': None,
                 'product_category_id': self._get_default_category(cr, uid, context),
                 'state': deps and 'dependency' or 'product'
             }
-
             wizard.write(record)
-
             return wizard.router({})
         raise orm.except_orm(_('Error'), _('Product not found!'))
 
@@ -437,9 +495,30 @@
                 'require_activation': line.product_id.require_activation
             }
             contract_service_obj.create(cr, uid, l, context=context)
+<<<<<<< TREE
 
             if line.product_id.type == 'product' and line.stock_move_id:
                 line.write({'stock_move_id': None})
+=======
+            if line.product_id.type == 'product':
+                location_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'stock', 'stock_location_stock')[1]
+                location_dest_id = wizard.contract_id.partner_id.property_stock_customer.id
+                move = {
+                    'name': line.product_id and line.product_id.name or '',
+                    'product_id': line.product_id and line.product_id.id,
+                    'product_uom': line.product_id and line.product_id.uom_id and line.product_id.uom_id.id or None,
+                    'prodlot_id': line.serial and line.serial.id,
+                    'location_id': location_id,
+                    'location_dest_id': location_dest_id,
+                    'partner_id': wizard.contract_id.partner_id.id,
+                    'type': 'out'
+                }
+                stock_move_id = stock_move_obj.create(cr, uid, move, context=context)
+                stock_move_obj.action_confirm(cr, uid, [stock_move_id], context=context)
+                stock_move_obj.action_done(cr, uid, [stock_move_id], context=context)
+        ids_to_unlink = contract_service_serial_obj.search(cr, uid, [], context=context)
+        contract_service_serial_obj.unlink(cr, uid, ids_to_unlink, context=context)
+>>>>>>> MERGE-SOURCE
 
         return {
             'type': 'ir.actions.act_window',
@@ -486,17 +565,13 @@
                 if line.state == 'serial':
                     stock_production_lot_obj = self.pool.get('stock.production.lot')
                     product_product_obj = self.pool.get('product.product')
-
                     query = [
                         ('product_id', '=', line.product_id.id),
                         ('stock_available', '>', 0)
                     ]
-
                     serial_ids = stock_production_lot_obj.search(cr, uid, query, context=context)
-
                     if not serial_ids:
                         line.write({'state': 'stock'})
-
                 return {
                     'name': _('Product Details') + ': ' + line.name,
                     'type': 'ir.actions.act_window',
@@ -520,3 +595,4 @@
             'nodestroy': True,
             'context': context
         }
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'contract_isp_package_configurator/wizard/package_configurator.xml'
--- contract_isp_package_configurator/wizard/package_configurator.xml	2013-10-10 19:22:10 +0000
+++ contract_isp_package_configurator/wizard/package_configurator.xml	2013-10-11 09:17:58 +0000
@@ -4,19 +4,20 @@
         <record id="view_contract_service_configurator_line_tree" model="ir.ui.view">
             <field name="name">Package Configurator Line</field>
             <field name="model">contract.service.configurator.line</field>
-	    <field name="type">tree</field>
+            <field name="type">tree</field>
             <field name="arch" type="xml">
                 <tree string="Package Configurator" version="7.0">
-		    <field name="product_id" />
-		</tree>
-	    </field>
-	</record>
+                    <field name="product_id" />
+                </tree>
+            </field>
+        </record>
 
         <record id="view_contract_service_configurator" model="ir.ui.view">
             <field name="name">Package Configurator</field>
             <field name="model">contract.service.configurator</field>
             <field name="arch" type="xml">
                 <form string="Package Configurator" version="7.0">
+<<<<<<< TREE
 		    <header>
 			<field name="state" class="oe_right" widget="statusbar" />
 		    </header>
@@ -99,50 +100,75 @@
 		</form>
 	    </field>
 	</record>
+=======
+                <header>
+                    <field name="state" class="oe_right" widget="statusbar" />
+                </header>
+                <field name="root_category_id" invisible="1" />
+                <field name="contract_id" on_change="onchange_contract_id(contract_id, root_category_id)" invisible="1" />
+                <group string="Category" attrs="{'invisible': [('state', '=', 'dependency')]}">
+                    <field nolabel="1" name ="product_category_id" options="{'no_open': True}" domain="['&amp;', ('id', 'child_of', [root_category_id]), ('type', '=', 'normal')]" /> 
+                </group>
+                <group string="Products" attrs="{'invisible': [('state', '=', 'dependency')]}">
+                    <group colspan="4">
+                    <div width="100%%">
+                        <field name="current_product_id" width="70%%" class="oe_inline" domain="[('categ_id', '=', product_category_id)]" options="{'no_open': True}" on_change="onchange_product_id(current_product_id)" placeholder="Product "/>
+                        <button name="do_add_current_product_id" string="Add" type="object" states="draft,product" width="15%%" class="oe_inline oe_highlight" />
+                    </div>
+                    </group>
+                    <group>
+                        <field name="line_ids" nolabel="1" mode="tree">
+                        <tree create="0">
+                            <field name="product_id" />
+                            <field name="serial" />
+                        </tree>
+                        </field>
+                    </group>
+                </group>
+                <group attrs="{'invisible': [('state', '&lt;&gt;', 'dependency')]}">
+                    <div colspan="4">
+                        <p>Click on add to view the available components</p>
+                    </div>
+                    <field name="dependency_ids" nolabel="1" mode="tree" widget="many2many" domain="[('configurator_id', '=', active_id)]">
+                    <tree>
+                        <field name="product_id" on_change="onchange_product_id(product_id, context)"/>
+                    </tree>
+                    </field>
+                </group>
+                <footer>
+                    <button name="do_next" string="Next" type="object" class="oe_highlight" states="dependency" />
+                    <button name="do_done" string="Done" type="object" class="oe_highlight" states="product,done" />
+                    <button string="Cancel" class="oe_link" special="cancel" />
+                </footer>
+                </form>
+            </field>
+        </record>
+>>>>>>> MERGE-SOURCE
 
         <record id="view_contract_service_configurator_line" model="ir.ui.view">
             <field name="name">Product Details</field>
             <field name="model">contract.service.configurator.line</field>
             <field name="arch" type="xml">
                 <form string="Package Configurator" version="7.0">
-		    <header>
-			<field
-			    name="state"
-			    class="oe_right"
-			    widget="statusbar"
-			    attrs="{'invisible': [('state', '=', 'message')]}"/>
-		    </header>
-		    <group string="Products" colspan="4" attrs="{'invisible': [('state', 'in', ('message', 'stock'))]}">
-			<field name="product_id" readonly="1" />
-			<field 
-			    name="serial"
-			    class="oe_inline"
-			    domain="[('product_id', '=', product_id), '&amp;', ('stock_available', '&gt;', 0)]"
-			    options="{'no_open': True}"
-			    placeholder="Serial Number"
-			    attrs="{'invisible': [('state', '=', 'draft')]}"/>
-		    </group>
-		    <group colspan="4" attrs="{'invisible': [('state', 'in', ('serial', 'stock'))]}">
-			<field 
-			    name="message" 
-			    nolabel="1"
-			    readonly="1"/>
-		    </group>
-		    <group colspan="4" attrs="{'invisible': [('state', 'in', ('message', 'serial', 'done'))]}">
-			<p>We don't have this product in stock at the moment!</p>
-		    </group>		    
-		    <footer>
-			<button 
-			    name="router"
-			    string="Ok"
-			    type="object"
-			    states="message,serial,stock"
-			    class="oe_highlight"
-			    />
-		    </footer>
-		</form>
-	    </field>
-	</record>
+                <header>
+                <field name="state" class="oe_right" widget="statusbar" attrs="{'invisible': [('state', '=', 'message')]}"/>
+                </header>
+                <group string="Products" colspan="4" attrs="{'invisible': [('state', 'in', ('message', 'stock'))]}">
+                    <field name="product_id" readonly="1" />
+                    <field name="serial" class="oe_inline" domain="[('product_id', '=', product_id), '&amp;', ('stock_available', '&gt;', 0)]" options="{'no_open': True}" placeholder="Serial Number" attrs="{'invisible': [('state', '=', 'draft')]}"/>
+                </group>
+                <group colspan="4" attrs="{'invisible': [('state', 'in', ('serial', 'stock'))]}">
+                    <field name="message" nolabel="1" readonly="1"/>
+                </group>
+                <group colspan="4" attrs="{'invisible': [('state', 'in', ('message', 'serial', 'done'))]}">
+                    <p>We don't have this product in stock at the moment!</p>
+                </group>
+                <footer>
+                    <button name="router" string="Ok" type="object" states="message,serial,stock" class="oe_highlight"/> 
+                </footer>
+                </form>
+            </field>
+    </record>
 
         <record id="action_contract_isp_package_configurator" model="ir.actions.act_window">
             <field name="name">Package Configurator</field>
@@ -150,9 +176,9 @@
             <field name="res_model">contract.service.configurator</field>
             <field name="view_type">form</field>
             <field name="view_mode">form</field>
-	    <field name="view_id" ref="contract_isp_package_configurator.view_contract_service_configurator" />
+            <field name="view_id" ref="contract_isp_package_configurator.view_contract_service_configurator" />
             <field name="target">new</field>
-	    <field name="context">{'default_contract_id': active_id}</field>
+            <field name="context">{'default_contract_id': active_id}</field>
         </record>
 
     </data>

=== modified file 'contract_isp_package_configurator/workflow/__init__.py'
--- contract_isp_package_configurator/workflow/__init__.py	2013-09-16 17:59:01 +0000
+++ contract_isp_package_configurator/workflow/__init__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
 #    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as

=== modified file 'product_dependencies/__init__.py'
--- product_dependencies/__init__.py	2013-09-16 17:59:01 +0000
+++ product_dependencies/__init__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
 #    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -20,4 +20,6 @@
 #
 ##############################################################################
 
-import product
+from . import product
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'product_dependencies/__openerp__.py'
--- product_dependencies/__openerp__.py	2013-09-16 17:59:01 +0000
+++ product_dependencies/__openerp__.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
 #    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -38,6 +38,7 @@
     'license': 'AGPL-3',
     'depends': ['product'],
     'data': ['product_dependencies_view.xml'],
-    'active': False,
+    'auto_install': False,
     'installable': True,
 }
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'product_dependencies/product.py'
--- product_dependencies/product.py	2013-09-16 17:59:01 +0000
+++ product_dependencies/product.py	2013-10-11 09:17:58 +0000
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
 #    Copyright (C) 2013 Savoirfaire-Linux Inc. (<www.savoirfairelinux.com>).
+#    Copyright (C) 2013 Serpent Consulting Services (<http://serpentcs.com>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -20,21 +20,16 @@
 #
 ##############################################################################
 
-from openerp.osv import orm, fields
-
-
-class product_dependency(orm.Model):
+from openerp.osv import osv, fields
+
+class product_dependency(osv.Model):
     _name = 'product.dependency'
 
     _columns = {
-        'name': fields.char('Name'),
-        'type': fields.selection((('product', 'Product'),
-                                  ('category', 'Category')),
-                                 'Type'),
-        'product_id': fields.many2one('product.product',
-                                      string='Product Dependency'),
-        'category_id': fields.many2one('product.category',
-                                       string='Category Dependency'),
+        'name': fields.char('Name', required=1),
+        'type': fields.selection((('product', 'Product'),('category', 'Category')),'Type'),
+        'product_id': fields.many2one('product.product',string='Product Dependency'),
+        'category_id': fields.many2one('product.category',string='Category Dependency'),
         'auto': fields.boolean('Automatically added'),
         'product_id': fields.many2one('product.product')
     }
@@ -49,37 +44,27 @@
             values['value']['category_id'] = None
         elif type_name == 'category':
             values['value']['product_id'] = None
-
         values['name'] = ''
-
         return values
 
     def onchange_product_id(self, cr, uid, ids, product_id):
         values = {'value': {'name': None}}
         if product_id:
-            name = self.pool.get('product.product').browse(
-                cr, uid, product_id, context={}).name
+            name = self.pool.get('product.product').browse(cr, uid, product_id, context={}).name
             values['value']['name'] = '%s (Product)' % name
-
         return values
 
     def onchange_category_id(self, cr, uid, ids, category_id):
         values = {'value': {'name': None}}
         if category_id:
-            name = self.pool.get('product.category').browse(
-                cr, uid, category_id, context={}).name
+            name = self.pool.get('product.category').browse(cr, uid, category_id, context={}).name
             values['value']['name'] = '%s (Category)' % name
-
         return values
 
-
-class product_product(orm.Model):
+class product_product(osv.Model):
     _inherit = 'product.product'
 
     _columns = {
-        'dependency_ids': fields.many2many('product.dependency',
-                                           'product_product_dependency_rel',
-                                           'dependency_id',
-                                           'product_id',
-                                           string='Dependencies')
+        'dependency_ids': fields.many2many('product.dependency','product_product_dependency_rel','dependency_id','product_id',string='Dependencies')
     }
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file

=== modified file 'product_dependencies/product_dependencies_view.xml'
--- product_dependencies/product_dependencies_view.xml	2013-09-16 17:59:01 +0000
+++ product_dependencies/product_dependencies_view.xml	2013-10-11 09:17:58 +0000
@@ -1,48 +1,43 @@
 <?xml version="1.0" encoding="utf-8"?>
 <openerp>
     <data>
-	<record id="view_product_dependencies_product_form" model="ir.ui.view">
-	    <field name="name">product.dependencies.product.form</field>
-	    <field name="model">product.product</field>
-	    <field name="inherit_id" ref="product.product_normal_form_view"/>
-	    <field name="arch" type="xml">
-		<xpath expr="//page[@string='Sales']" position="after">
-		    <page string="Dependencies">
-			<group string="Dependencies">
-			    <field name="dependency_ids" mode="tree" nolabel="1">
-				<tree version="7">
-				    <field name="type" on_change="onchange_type(type)" />
-				    <field name="name" />
-				    <field name="product_id" invisible="1" />
-				    <field name="category_id" invisible="1" />
-				    <field name="auto" />
-				</tree>
-			    </field>
-			</group>
-		    </page>
-		</xpath>
-	    </field>
-	</record>
-	<record id="view_product_dependencies_form" model="ir.ui.view">
-	    <field name="name">product.dependencies.form</field>
-	    <field name="model">product.dependency</field>
-	    <field name="arch" type="xml">
-		<form string="Dependency" version="7.0">
-		    <group>
-			<field name="type" on_change="onchange_type(type)" required="1" />
-			<field 
-			    on_change="onchange_product_id(product_id)"
-			    name="product_id"
-			    attrs="{'invisible': [('type', '&lt;&gt;', 'product')], 'required': [('type', '=', 'product')]}" />
-			<field 
-			    on_change="onchange_category_id(category_id)"
-			    name="category_id"
-			    attrs="{'invisible': [('type', '&lt;&gt;', 'category')], 'required': [('type', '=', 'category')]}" />
-			<field name="auto" />
-			<field name="name" invisible="1" />
-		    </group>
-		</form>
-	    </field>
-	</record>
+    <record id="view_product_dependencies_product_form" model="ir.ui.view">
+        <field name="name">product.dependencies.product.form</field>
+        <field name="model">product.product</field>
+        <field name="inherit_id" ref="product.product_normal_form_view"/>
+        <field name="arch" type="xml">
+        <xpath expr="//page[@string='Sales']" position="after">
+            <page string="Dependencies">
+                <group string="Dependencies">
+                    <field name="dependency_ids" mode="tree" nolabel="1">
+                    <tree version="7">
+                        <field name="type" on_change="onchange_type(type)" />
+                        <field name="name" />
+                        <field name="product_id" invisible="1" />
+                        <field name="category_id" invisible="1" />
+                        <field name="auto" />
+                    </tree>
+                    </field>
+                </group>
+            </page>
+        </xpath>
+        </field>
+    </record>
+
+    <record id="view_product_dependencies_form" model="ir.ui.view">
+        <field name="name">product.dependencies.form</field>
+        <field name="model">product.dependency</field>
+        <field name="arch" type="xml">
+        <form string="Dependency" version="7.0">
+        <group>
+            <field name="type" on_change="onchange_type(type)" required="1" />
+            <field on_change="onchange_product_id(product_id)" name="product_id" attrs="{'invisible': [('type', '&lt;&gt;', 'product')], 'required': [('type', '=', 'product')]}" />
+            <field on_change="onchange_category_id(category_id)" name="category_id" attrs="{'invisible': [('type', '&lt;&gt;', 'category')], 'required': [('type', '=', 'category')]}" />
+            <field name="auto" />
+            <field name="name" invisible="1" />
+        </group>
+        </form>
+        </field>
+    </record>
     </data>
 </openerp>


Follow ups