savoirfairelinux-openerp team mailing list archive
-
savoirfairelinux-openerp team
-
Mailing list archive
-
Message #00400
[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="['&', ('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', '<>', '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), '&', ('stock_available', '>', 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), '&', ('stock_available', '>', 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', '<>', 'product')], 'required': [('type', '=', 'product')]}" />
- <field
- on_change="onchange_category_id(category_id)"
- name="category_id"
- attrs="{'invisible': [('type', '<>', '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', '<>', 'product')], 'required': [('type', '=', 'product')]}" />
+ <field on_change="onchange_category_id(category_id)" name="category_id" attrs="{'invisible': [('type', '<>', 'category')], 'required': [('type', '=', 'category')]}" />
+ <field name="auto" />
+ <field name="name" invisible="1" />
+ </group>
+ </form>
+ </field>
+ </record>
</data>
</openerp>
Follow ups